Удалить все записи в списке Redis - PullRequest
70 голосов
/ 22 марта 2012

Предположим, у вас есть тип данных LIST в Redis.Как удалить все записи?Я уже пробовал это:

LTRIM key 0 0
LTRIM key -1 0

Оба они оставляют первый элемент.Это оставит все элементы:

LTRIM key 0 -1

Я не вижу отдельной команды для полного опустошения списка.

Ответы [ 6 ]

119 голосов
/ 22 марта 2012

Удалите ключ, и это очистит все элементы.Отсутствие списка похоже на отсутствие элементов в нем.Redis не будет выдавать никаких исключений при попытке доступа к несуществующему ключу.

DEL key

Вот некоторые журналы консоли.

14 голосов
/ 20 октября 2013

Вы можете удалить все значения из списка , только если список имеет более одного значения

LTRIM key -1 0

Пример:

redis 127.0.0.1:6379> RPUSH mylist four 1 3 1
(integer) 4
redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"
6) "mylist"
redis 127.0.0.1:6379> LTRIM mylist -1 0
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
(empty list or set)
redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"

Но если список имеет только одно значение, вы должны использовать

DEL key 
3 голосов
/ 24 июля 2018

Просто используйте LTRIM .... Ааа а магия здесь должна использовать start больше end.

LTRIM key 99 0

И ... бум!там идет весь список элементов.Просто * пуф * прямо перед твоими глазами !!Остатков не осталось, и абсолютно никаких вопросов.

Примечание: Это приведет к «удалению» ключа ( как в удаленном ), как описано здесь

... если начало больше конца списка или начало> конец, результатом будет пустой список (который приводит к удалению ключа).

0 голосов
/ 03 июля 2018

Я попробовал это, и это работает для меня.Просто замените myList на имя вашего списка и выполните его redis-cli KEYS "myList:*" | xargs redis-cli DEL

0 голосов
/ 27 июля 2017

Я отвечаю по телефону, поэтому не могу правильно отформатировать ответ.

Это может быть запоздалый ответ, но я оставлю его здесь на всякий случай, если кому-то все еще нужна эта функциональность.

Краткий ответ

ltrim mylist 0 - (n + 1) где mylist - это ключ, а n - длина mylist.

Длинный ответ

Способ работы итрима заключается в том, что он принимает два индекса и возвращает элементы, которые попадают между ними, включая индексы.

Ltrim list startIndex endIndex

Пример при условии, что у нас есть список повторного редактирования с ключевым списком mylist, содержащий 10 записей:

ltrim mylist 0 5 обрежет список до элементов, начиная с индекса 0 до индекса 5. И отбросит те, которые выходят за пределы этого диапазона.

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

-1 относится к последнему элементу, - 2 предпоследнему элементу и т. Д. И (-n) - первый элемент.

Вне диапазона индексы не вредны. Если конечный индекс больше длины списка, redis рассматривает его как равный последнему индексу.

Вот почему ltrim mylist 0, - (n +1) очищает список. Это происходит потому, что (-n) эквивалентно индексу 0. Добавление 1 к нему не оставляет элементов в этом диапазоне, поскольку оно будет перед первым элементом.

0 голосов
/ 30 декабря 2013

принятый ответ неверен. предположим, у меня есть

redis 127.0.0.1:6379> KEYS * 
1) "newKey" 
2) "firstHash" 
3) "secondList" 
4) "test4" 
5) "firstList" 
6) "mylist" 

использовать пример Ахмеда, который на самом деле верен. сейчас, если я сделаю:

DEL 'test4'

Я получаю:

1) "newKey" 
2) "firstHash" 
3) "secondList" 
4) "firstList" 
5) "mylist"` 

Итак, я не удалил все записи из списка 'test4', я удалил test4 сам . не то же самое. не за что. У меня есть небольшое приложение, в котором ключи списка - это хэши, вычисленные из нескольких данных (ну, не так ли?), эти списки иногда очищаются, но семантика пустого списка и несуществующего списка очень разные. так что нет, я не хочу удалять «myhashes», я хочу просто удалить все записи.

Остерегайтесь, о, кто здесь бродит.

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