Suponga que tiene un tipo de datos LIST en Redis. ¿Cómo borras todas sus entradas? Ya intenté esto:
LTRIM key 0 0
LTRIM key -1 0
Ambos dejan el primer elemento. Esto dejará todos los elementos:
LTRIM key 0 -1
No veo un comando separado para vaciar completamente una lista.
mylist
haría su pregunta más clara. Por ejemplo, redis.io/commands/ltrim escribe:LTRIM mylist 1 -1
. La página que cita es una referencia de comando y no debe considerarse una "convención" para hacer buenos ejemplos.Respuestas:
Elimine la clave y eso borrará todos los elementos. No tener la lista en absoluto es similar a no tener ningún elemento en ella. Redis no arrojará ninguna excepción cuando intente acceder a una clave inexistente.
Aquí hay algunos registros de la consola.
fuente
may create extra overhead
, complejidad de tiempo: O (N) donde N es el número de claves que se eliminarán. Cuando una clave para eliminar tiene un valor que no es una cadena, la complejidad individual de esta clave es O (M) donde M es el número de elementos en la lista, conjunto, conjunto ordenado o hash. Eliminar una sola clave que contiene un valor de cadena es O (1). Los documentosPuede eliminar todos los valores de la lista solo si la lista tiene más de un valor
Ejemplo:
Pero si la Lista tiene un solo valor, debe usar
fuente
Solo usa LTRIM . ... Aaa y la magia aquí es usar
start
mayor queend
.¡Y bum! ahí va toda la lista de elementos. ¡¡Solo * pooof * justo en frente de tus ojos !! No quedan residuos y no se hacen preguntas.
Nota: Esto hará que la clave sea "eliminada" ( como en eliminada ) como se describe aquí.
fuente
DEL key
como en la respuesta de @ Anurag? Parece que tienen el mismo efecto.LTRIM
repetidamente, y es bueno saber qué sucede cuando el segundo parámetro cae por debajo del primero. Puedo ver cómo explotar este comportamiento podría hacer que algún código sea más elegante.la respuesta aceptada es incorrecta. supongo que tengo
para usar el ejemplo de ahmed, que en realidad es correcto. ahora, si lo hago:
termino con:
Por lo tanto, no se quitaron todas las entradas de la lista 'test4', i quitado test4 propio . no es lo mismo. De ningún modo. Tengo una pequeña aplicación donde las claves de la lista son hashes calculados a partir de varios datos (bueno, ¿no son todos?), esas listas a veces se borran, pero la semántica de una lista vacía y una lista inexistente son muy diferentes. entonces, no, no quiero BORRAR 'myhashes', solo quiero eliminar todas las entradas.
cuidado, oh tú que deambulas por aquí.
fuente
The LPUSH command inserts a new element on the head, while RPUSH inserts a new element on the tail. A new list is created when one of this operations is performed against an empty key. Similarly the key is removed from the key space if a list operation will empty the list. These are very handy semantics since all the list commands will behave exactly like they were called with an empty list if called with a non-existing key as argument.
Probé esto y me funciona. Simplemente cambie myList por el nombre de su lista y ejecútelo
redis-cli KEYS "myList:*" | xargs redis-cli DEL
fuente
keys
es una operación extremadamente pesada que implica analizar cada clave en su base de datos, lo cual es bastante innecesario en este caso, o más bien en la mayoría de los casosEsta podría ser una respuesta tardía, pero la voy a pegar aquí en caso de que alguien aún necesite esa funcionalidad.
Respuesta corta
ltrim mylist 0 - (n + 1) donde mylist es la clave y n es la longitud de mylist.
Respuesta larga
La forma en que ltrim funciona es que, toma dos índices y devuelve los elementos que se encuentran entre ellos, incluidos los índices.
Ltrim lista startIndex endIndex
Ejemplo asumiendo que tenemos una lista redis con mylist clave que contiene 10 entradas:
ltrim mylist 0 5 recortará la lista a elementos comenzando desde el índice 0 hasta el índice 5. Y descartará aquellos que estén fuera de ese rango.
Afortunadamente, las operaciones de redis list admiten la indexación negativa, lo que resulta extremadamente útil en algunas situaciones. Normalmente, cuando no conoce la longitud de la lista.
-1 se refiere al último elemento, - 2 al penúltimo elemento, etc. Y (-n) es el primer elemento.
Los índices fuera de rango no son dañinos. Si el índice final es mayor que la longitud de la lista, redis lo trata como igual al último índice.
Por eso ltrim mylist 0, - (n +1) borra la lista. Lo hace porque (-n) es equivalente al índice 0. Sumarle 1 no deja ningún elemento dentro de ese rango, ya que estará antes del primer elemento.
fuente
ltrim mylist 0 -99999
.