2013-06-14 4 views
0

Я работаю с PHP (я новичок в этом), и у меня есть такой сценарий:PHP Memcache для хранения повторяющихся ключей для различных значений

У меня есть список с 3 (или более) IP-адреса + порты, что приходит из файла, так что каждая строка моего файла имеет:

192.168.3.41:8013 
192.168.3.41:8023 
192.168.3.41:8033 

Так что в моем массиве, эти элементы array[0], array[1], array[2]. Цель приложения проста, пинг IP: PORT и знать, отвечает ли он и сколько ошибок ping у него есть. Но это еще не все, я должен посчитать время, необходимое для выполнения процесса в течение 3 минут и 1 минуты. Итак, меня попросили работать с MemCache, чтобы сделать следующее:

Для каждого IP: PORT мне нужно сохранить в MemCache, сколько ошибок у меня есть за 3 минуты, а также количество ошибок, которые у меня есть в течение 1 минуты, так что-то вроде этого:

Для числа ошибок в 3 минуты

Map<Key, Value> = Map<IP:PORT, NumberOfErrors3Mins> 

Для числа ошибок в 1 минуту

Map<Key, Value> = Map<IP:PORT, NumberOfErrors1Min> 

Таким образом, выборка данных может быть как т его:

За 3 минуты:

<192.168.3.41:8013, 5> 
<192.168.3.41:8023, 2> 
<192.168.3.41:8023, 0> 

в течение 1 минуты:

<192.168.3.41:8013, 3> 
<192.168.3.41:8023, 1> 
<192.168.3.41:8023, 1> 

Итак, у меня есть две карты и 3 записи для каждой карты. Я довольно новыми для PHP и MemCache отчасти трудно мне, логика я тверда является следующее:

$array = array('192.168.3.41:8013','192.168.3.41:8023','192.168.3.41:8033'); 

for ($i = 0; $i < count($array); ++$i){ 
     $currentProxy = $array[$i]; 
     echo "working on $i : <br/>"; 
     echo "good to see you friend:".$currentProxy."<br/>"; 
     $res1 = $memt1->get($currentProxy); 
     $res2 = $memt2->get($currentProxy); 
     echo "response for proxy:".$res1."<br/>"; 
     echo "response for proxy:".$res2."<br/>"; 
     if (!$res1){ 
       echo "Does not exist - create<br/>"; 
       $memt1->set($currentProxy, 1, null, 0); 
     } else { 
       echo "Does exist - help<br/>"; 
       $memt1->increment($currentProxy); 
     } 

     if (!$res2){ 
       echo "Does not exist - create<br/>"; 
       $memt2->set($currentProxy, 1, null, 0); 
     } else { 
       echo "Does exist - help<br/>"; 
       $memt2->increment($currentProxy); 
     } 

} 

Проблема я столкнулся, что оба memt1 и memt2 имеют в виду то же самое, например, , если я увеличиваю значение < 192.168.3.41:8013> для memt1, он также увеличивает его для memt2, я думаю, что это может быть очень вопрос noob, но я только что вошел в мир PHP, и я не знаю, как обращаться это вообще то, что я пробовал, если кто-то мог мне помочь, пожалуйста, я был бы очень благодарен. Заранее спасибо.

ответ

0

я это сделал, это было проще, о чем я думал раньше:

В принципе, один MemCache для всех типов возможных ключей со значениями, я не знаю, как использовать это хорошо, но теперь он работает и идеально подходит для меня, надеюсь, что это поможет кому-то, кто начнет с этого:

$memHandler = new MemCache(); 
if ($memHandler) { 
    $memHandler->connect('localhost','11211'); 
} else { 
    die('Problem with MemCache'); 
} 

$array1 = $memHandler->get('e1'); 
$array3 = $memHandler->get('e3'); 
$lcr1 = $memHandler->get('lcr1'); 
$lcr3 = $memHandler->get('lcr3'); 

if (!$array1) { 
    echo 'Does not exist - create<br/>'; 
    $memHandler->set('e1', $newArray); 
} else { 
    echo 'Does exist<br/>'; 
    foreach ($array1 as $key => $value) { 
     echo $key.':'.$value.'<br/>'; 
    } 
} 

if (!$array3) { 
    echo 'Does not exist - create<br/>'; 
    $memHandler->set('e3', $newArray); 
} else { 
    echo 'Does exist<br/>'; 
    foreach ($array3 as $key => $value) { 
      echo $key.':'.$value.'<br/>'; 
     } 

} 

echo '=============================<br/>'; 

if (!$lcr1){ 
    echo 'Does not exist - create date<br/>'; 
     $memHandler->set('lcr1', time()); 
} else { 
    echo 'Does exist<br/>'; 
    echo $lcr1.'<br/>'; 
} 

if (!$lcr3){ 
     echo 'Does not exist - create date<br/>'; 
     $memHandler->set('lcr3', time()); 
} else { 
     echo 'Does exist<br/>'; 
     echo $lcr3.'<br/>'; 
} 
Смежные вопросы