Привет ребята! Делаю оптимистическую блокировку в Predis. Проблема в том, что в документации Redis говорится, что при изменении отслеживаемого ключа выполнение возвращает «Нулевой групповой ответ». Как это выглядит в Predis? К сожалению, я не нашел никаких полезных документов для Pedis (не считая самых простых руководств).
Вот как мой код выглядит на данный момент:
private function updateUrlMaxProcessingTime($time, $hoursSinceUnixEpoch) {
//Save the key and the field. They can change anytime because of the timestamp.
$key = $this->statisticsConfig->getKeyFromDataName(StatisticsEnum::URL_MAX_PROCESS_TIME, $hoursSinceUnixEpoch);
$field = $this->statisticsConfig->getFieldFromDataName(StatisticsEnum::URL_MAX_PROCESS_TIME, $hoursSinceUnixEpoch);
//Update the max url processing time if necessary.
$this->redis->watch($key);
$val = $this->redis->hget($key, $field);
if ($val < $time) {
$this->redis->multi();
$this->redis->hset($key, $field, $time);
$result = $this->redis->exec();
//TODO: fix this
if ($result != null && $result[0] != null && $result[0] != -1) {
return true;
} else {
return false;
}
} else {
$this->redis->unwatch();
return true;
}
}
Я вызываю функцию до тех пор, пока она возвращает false.