Проверьте, существует ли ключ в списке Redis без получения списка

Я использую Redis для PHP.

Мне нужно проверить, существует ли ключ в списке redis, и если нет, добавьте его. На данный момент мой код выглядит следующим образом:

$redis = Redis::connection();
$redis->pipeline(function($pipe)  use ($type, $redis)
{
$list = $pipe->lRange($type.'_unique_list', 0, -1);
if(!in_array($this->uid, $list)) {
$pipe->rPush($type . '_unique_list', $this->uid);
}
});

Проблема в том, что $list взято из $pipe возвращает объект Redis, а не массив, и in_array не работает. Но если я использую $redis->lRangeСценарий становится слишком медленным.

Поэтому мой вопрос, есть ли возможность проверить, существует ли ключ в списке Redis без получения списка в сценарий? Какая-то особая команда Redis, которую я не могу найти в документации? Или, может быть, я мог бы заменить in_array с чем-то еще в этой конкретной ситуации?

0

Решение

Неправильный ответ: вы можете позвонить LINDEX вместо того, чтобы делать поиск в клиенте.

Правильный ответ: сканирование связанного списка всегда является дорогостоящей операцией (O (N)), независимо от того, выполняется ли она на стороне сервера или на стороне клиента. Рассмотрите возможность использования другой структуры данных, например, Набор для этой цели, если ваш N большой.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]