2013-06-14 4 views
0

Je travaille avec PHP (je suis très nouveau à ce sujet) et j'ai ce scénario:php Memcache pour stocker les clés répétées pour différentes valeurs

J'ai une liste avec 3 (ou plus) les adresses IP + ports qui provient d'un fichier, de sorte que chaque ligne de mon fichier a:

192.168.3.41:8013 
192.168.3.41:8023 
192.168.3.41:8033 

donc, dans mon tableau, ce sont des éléments array[0], array[1], array[2]. Le but de l'application est simple, ping sur IP: PORT et savoir si elle répond et combien d'erreurs ping elle a. Mais ce n'est pas tout, je dois compter le temps qu'il faut pour faire le processus pendant 3 minutes et 1 minute. Donc, on m'a demandé de travailler avec MemCache pour faire ce qui suit:

Pour chaque IP: PORT, je dois enregistrer dans MemCache combien d'erreurs ai-je en 3 minutes ainsi que le nombre d'erreurs que j'ai en 1 minute, quelque chose comme ça:

Pour nombre d'erreurs en 3 minutes

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

Pour nombre d'erreurs en 1 minute

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

Ainsi, un échantillon de données pourrait ressembler t son:

3 minutes:

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

1 minute:

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

Alors, j'ai deux cartes et 3 entrées pour chaque carte. Je suis assez nouveau pour PHP et MemCache est un peu difficile pour moi, la logique I affermis est la suivante:

$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); 
     } 

} 

Le problème que je suis face est que les deux memt1 et memt2 font référence au même, par exemple , si je incrémente < 192.168.3.41:8013> pour memt1, il l'incrémente aussi pour memt2, je pense que cela pourrait être une question très noob, mais je viens d'entrer dans le monde PHP et je ne sais pas comment gérer ceci du tout, c'est ce que j'ai essayé, si quelqu'un pouvait m'aider, s'il vous plaît, je serais vraiment reconnaissant. Merci d'avance.

Répondre

0

je l'ai fait, il était de plus simple ce que je pensais avant:

Fondamentalement, un MemCache pour tous les types de clés possibles avec des valeurs, je ne savais pas comment bien l'utiliser, mais maintenant il fonctionne et correspond parfait pour moi, j'espère que cela aide quelqu'un qui commence avec ceci:

$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/>'; 
} 
Questions connexes