php memcache存储不同值的重复键

时间:2013-06-14 14:32:30

标签: php map memcached

我一直在使用PHP(我对此非常陌生),我有这种情况:

我有一个包含3个(或更多)IP地址+来自文件的端口的列表,因此我文件的每一行都有:

192.168.3.41:8013
192.168.3.41:8023
192.168.3.41:8033

所以在我的数组中,这些是元素array[0], array[1], array[2]。应用程序的目的很简单,ping 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>

所以,每张地图都有两张地图和三个条目。我对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都指的是相同的,例如,如果我增加&lt; 192.168.3.41:8013&gt;对于memt1,它也会为memt2增加它,我认为这可能是一个非常noob的问题,但我刚刚进入PHP世界,我根本不知道如何处理这个问题,这就是我试过的,如果有人可以帮帮我,拜托,我真的很感激。提前谢谢。

1 个答案:

答案 0 :(得分: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/>';
}