みんな!Predis で楽観的ロックを行っています。問題は、Redis のドキュメントに、監視対象のキーが変更されると、実行によって「Null Multi-bulk reply」が返されると記載されていることです。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 である限り、関数を呼び出します。