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