Я пытаюсь добавить массив к существующему ключу в redis, используя php.
То, что я сейчас делаю, пытается сначала получить массив в ключе. Если ключ не существует, установите двумерный массив на этот ключ.
Если ключ существует, получите исходный массив в этом ключе, а затем добавьте массив к исходному массиву. Затем верните его к этому ключу.
Моя проблема в том, что, когда два разных клиента A и B добавляют новый массив одновременно, некоторый массив отсутствует.
Я предполагаю, что клиенты A и B получают один и тот же исходный массив, но A возвращает его первым. Затем B возвращает его обратно, перезаписывает только что установленную запись клиента A.
Мой код:
$cache = new Redis();
$origin = $cache->getArray(self::CACHE_PREFIX . $uid);
if(is_array($origin) && count($origin) > 0){
array_push($origin, $arr);
$master = $origin;
}else{
$master = [$arr];
}
$cache->setArray(self::CACHE_PREFIX . $uid, $master);
Что я должен сделать, чтобы сделать это правильно?
РЕДАКТИРОВАТЬ:
вот лог
2019-03-22 11:57:45 1553227065.3247 ORIGINfalse //Client A operate, the key is not exist
2019-03-22 11:57:45 1553227065.326 MASTER[{"sids":["759"],"to":"7223","status":1,"type":"notice"}] //Client A insert an new array
2019-03-22 11:57:45 1553227065.3402 ORIGIN[{"sids":["759"],"to":"7223","status":1,"type":"notice"}] //Client A operate
2019-03-22 11:57:45 1553227065.3402 ORIGIN[{"sids":["759"],"to":"7223","status":1,"type":"notice"}] //Client B operate
2019-03-22 11:57:45 1553227065.3411 MASTER[{"sids":["759"],"to":"7223","status":1,"type":"notice"},{"sids":["764"],"to":"7223","status":1,"type":"notice"}] //Client A append an new array
2019-03-22 11:57:45 1553227065.3413 MASTER[{"sids":["759"],"to":"7223","status":1,"type":"notice"},{"sids":["760"],"to":"7223","status":1,"type":"notice"}] //Client B also append an new array ,and overwrite Client A's data