Удалить все записи в списке Redis
предположим, что у вас есть тип данных списка в Redis. Как удалить все его записи? Я уже пробовал это:
LTRIM key 0 0
LTRIM key -1 0
оба они оставляют первый элемент. Это оставит все элементы:
LTRIM key 0 -1
Я не вижу отдельной команды, чтобы полностью очистить список.
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', я просто хочу, чтобы удалить все записи.
берегитесь, О вы, кто бродит здесь.