2015-03-20 1 views
1

Я использую кластерный redis. Все, что я хочу сделать, это добавить новое значение в ограниченный набор.check-and-set action on redis cluster php

Это мой код:

$redis->watch(keyMem) 
$count = $redis->scard($keyMem); 
if($count < $limit) 
$redis->multi() 
    ->sadd($keyMem, $value) 
    ->exec(); 

и я получаю:

"не использовать 'часы' над гроздьями соединений."

ответ

0

Не удалось найти решение, и я закодировал свой собственный замок.

$keyLock = $keyMem."lock"; 
$start_time = microtime(); 
while(true){ 
    if($redis->setnx($keyLock, "1")){ 
    $count = $redis->scard($keyMem); 
    if(i$count < $limit){ 
     $r = $tredis->sadd($keyMem, $value); 
    } 
    $redis->del($keyLock); 
    } 
    else{ 
    if(microtime() - $start_time > 0.05){ 
     $tredis->del($keyLock); 
    } 
    } 
}