Удалить все записи в списке Redis


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

LTRIM key 0 0
LTRIM key -1 0

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

LTRIM key 0 -1

Я не вижу отдельной команды, чтобы полностью очистить список.

6 60

6 ответов:

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

DEL key

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

redis> KEYS *
(empty list or set)
redis> LPUSH names John
(integer) 1
redis> LPUSH names Mary
(integer) 2
redis> LPUSH names Alice
(integer) 3
redis> LLEN names
(integer) 3
redis> LRANGE names 0 2
1) "Alice"
2) "Mary"
3) "John"
redis> DEL names
(integer) 1
redis> LLEN names
(integer) 0
redis> LRANGE names 0 2
(empty list or set)

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

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 

просто использовать LTRIM. ...Аааа и то магия использовать startбольшеend.

LTRIM key 99 0

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

Примечание: это приведет к тому, что ключ будет "удален" (как в deleted), как описано здесь

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

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

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

короткий ответ:

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

ответ

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

функция ltrim список начальный_индекс endindex включительно

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

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

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

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

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

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

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

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

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', я просто хочу, чтобы удалить все записи.

берегитесь, О вы, кто бродит здесь.