Подтвердить что ты не робот

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

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

LTRIM key 0 0
LTRIM key -1 0

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

LTRIM key 0 -1

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

4b9b3361

Ответ 1

Удалите ключ, и он очистит все элементы. Отсутствие списка вообще похоже на отсутствие каких-либо элементов в нем. 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)

Ответ 2

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

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

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

LTRIM key 99 0

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

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

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

Ответ 4

Отвечая на мой телефон, я не могу правильно отформатировать ответ.

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

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

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

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

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

Список подписчиков startIndex endIndex

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

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

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

DEL 'test4'

i в итоге:

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

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

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