redis - добавить несколько значений в список и получить несколько значений - PullRequest
0 голосов
/ 05 сентября 2018

Не знаю, правильный ли тип данных list?

Мне нужно добавить много элементов в список, а затем мне нужно выбрать все элементы .. После того, как элемент получен, его необходимо удалить

$list = 'the:list';
$redis
    ->multi()
    ->lRange($list, 0, -1)
    ->lTrim($list, -1, 0)
    ->exec();

Приведенный выше код извлекает элементы, но не удаляет их после извлечения? Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Если вы читаете их последовательно, вы можете использовать LPOP или RPOP , который удалит его из списка и вернет.

Если вам нужно прочитать их случайным образом, то, возможно, используйте тип данных SET, а не LIST, тогда вы можете использовать SPOP

UPDATE Основываясь на нескольких комментариях, которые вы сделали вместе с вашим первоначальным вопросом, похоже, что вы хотите прочитать весь список, а затем удалить его, но вы обеспокоены тем, что элементы вставляются между операциями чтения и удаления?

Если это так, используйте транзакцию redis . Используйте LRange , а затем DEL на клавише. Как вы можете видеть из документов, транзакция гарантирует, что ничто не повлияет на список между двумя операциями, поэтому любые новые дополнения просто приведут к повторному созданию списка.

Все команды в транзакции сериализуются и выполняются последовательно. Никогда не может случиться так, что запрос, выданный другим клиент обслуживается в середине исполнения Redis сделка. Это гарантирует, что команды выполняются как одиночная изолированная операция.

Или, другими словами, замените свою отделку на удаление, и все готово.

0 голосов
/ 05 сентября 2018

После того, как вы извлечете данные. Затем вы можете истечь срок действия ключа.

Например: https://redis.io/commands/expire

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...