2012-01-10 17 views
50

Quiero eliminar las claves que coinciden con "usuario *".En redis, ¿cómo elimino las claves?

¿cómo hago eso en la línea de comando de redis?

+1

en Redis se no elimine las claves sino que las mismas se eliminen. –

Respuesta

33

Esta no es una característica en este momento para poder hacer en una sola toma (ver los comentarios en el DEL documentation). Desafortunadamente, solo se le deja usar KEYS, recorriendo los resultados, y luego usando DEL para eliminar cada uno.

¿Qué tal si usamos bash un poco para ayudar?

for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'` 
do echo DEL $key 
done | redis-cli 

para pasar por ella:

  1. echo 'KEYS user*' | redis-cli | awk '{print $1}' - conseguir todas las llaves y despojar a cabo el texto adicional que no desea con awk.
  2. echo DEL $key - para cada una, crea una instrucción de eco para eliminarla.
  3. | redis-cli - tome las instrucciones DEL y vuelva a pasarlas a la cli.

No es lo que sugiere que este es el mejor enfoque (que podría tener algunos problemas si algunos de sus nombres de usuario tienen espacios en ellos, pero espero que usted consigue el punto).

2

Además de la respuesta de orangeoctopus, no necesita el echo y la tubería, puede pasar comandos como argumentos en redis-cli. Esto significa que puede hacer

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'` 
do redis-cli "DEL" "$key" 
done 
43

Otra compacto de una sola línea que utilizo para hacer lo que quieres es:

redis-cli KEYS "user*" | xargs redis-cli DEL 
+1

Esto es genial, gracias. Es triste que Redis no tenga esta funcionalidad de forma nativa. – snapfractalpop

+3

Si tiene bases de datos multibles (espacios de teclado), este es el truco: Supongamos que necesita eliminar claves en db3: prefijo 'redis-cli -n 3 KEYS ': *" | xargs redis-cli -n 3 DEL' – Christoffer

+0

¿Hay un trazador de líneas si necesita proporcionar AUTH (es decir, inicio de sesión) antes de ejecutar el comando de eliminar? – thames

0

Sé que esto es viejo, pero para aquellos de ustedes venir aquí forman Google:

Acabo de publicar una utilidad de interfaz de línea de comandos para npm y github que le permite eliminar claves que coincidan con un patrón dado (incluso , o como le preguntó al usuario) desde una base de datos Redis.

Usted puede encontrar la utilidad aquí:

https://www.npmjs.com/package/redis-utils-cli

1

Usando awk, encontrar todas las claves de contrapartida de Redis utilizando redis-cli KEYS mando y tubería para redis-cli DEL comando.

redis-cli KEYS "user*" | awk '{ system("redis-cli DEL " $1) }' 
0

Al utilizar el delineador, puede editar el patrón en caso de que escape a caracteres específicos. Por ejemplo, para eliminar los patrones como '\ b test \ b' uso:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del 
0

Utilice esta opción para eliminar las claves Redis tener barras invertidas, citas, comillas dobles o espacios:

redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL

Cuestiones relacionadas