Redis comando para obtener todas las claves disponibles?


503

¿Existe un comando de Redis para recuperar todas las claves de la base de datos? He visto algunas bibliotecas python-redis buscándolas. Pero me preguntaba si es posible desde redis-client.

Respuestas:


722

Intenta mirar el KEYScomando. KEYS *enumerará todas las claves almacenadas en redis.

EDITAR: tenga en cuenta la advertencia en la parte superior de la KEYSpágina de documentación:

Complejidad de tiempo: O (N) con N siendo el número de claves en la base de datos, bajo el supuesto de que los nombres de clave en la base de datos y el patrón dado tienen una longitud limitada.

ACTUALIZACIÓN (V2.8 o superior): SCAN es una alternativa superior a KEYS, en el sentido de que no bloquea el servidor ni consume recursos significativos. Prefiero usarlo.


96
Ejemplo de uso de CLI:redis-cli keys "*"
XåpplI'-I0llwlg'I -

44
Corrección: todos los comandos de redis son de un solo hilo y bloquearán el servidor. La única diferencia es que KEYStiene el potencial de bloquear el servidor durante más tiempo cuando se consulta un conjunto de datos grande
Leo

156

Actualizado para Redis 2.8 y superior

Como se señaló en los comentarios de respuestas anteriores a esta pregunta, KEYSes un comando potencialmente peligroso ya que su servidor Redis no estará disponible para realizar otras operaciones mientras lo atiende. Otro riesgo KEYSes que puede consumir (dependiendo del tamaño de su espacio de teclas) una gran cantidad de RAM para preparar el búfer de respuesta, lo que posiblemente agote la memoria de su servidor.

La versión 2.8 de Redis había introducido la familia de comandos SCAN que son mucho más amables y se pueden usar para el mismo propósito.

La CLI también proporciona una buena manera de trabajar con ella:

$ redis-cli --scan --pattern '*'

59

Puede suceder que usando redis-cli, se conecte a su redis-server remoto y luego el comando:

KEYS *

no muestra nada, o mejor, muestra:
(empty list or set)

Si está absolutamente seguro de que el servidor Redis que usa es el que tiene los datos, entonces quizás su redis-cli no se está conectando a la instancia correcta de la base de datos Redis.

Como se menciona en los documentos de Redis, las nuevas conexiones se conectan por defecto a la base de datos 0 .

En mi caso, el KEYScomando no estaba recuperando resultados porque mi base de datos era 1. Para seleccionar la base de datos que desea, use SELECT .
El db se identifica por un número entero.

SELECT 1
KEYS *

Publico esta información porque ninguna de las respuestas anteriores estaba resolviendo mi problema.


31

-> Obtén todas las claves de redis-cli

-redis 127.0.0.1:6379> keys *

-> Obtener una lista de patrones

-redis 127.0.0.1:6379> keys d??

Esto producirá claves que comienzan por 'd' con tres caracteres.

-redis 127.0.0.1:6379> keys *t*

Esto obtendrá claves con coincidencias con el carácter 't' en la clave

-> Cuente las claves de la línea de comando por

-redis-cli keys * |wc -l

-> O puedes usar dbsize

-redis-cli dbsize

Solo copié las respuestas y lo intenté. Le dio "comando desconocido 'clave'". "clave" no es el comando, "claves" es. Por favor corrija key *t*a keys *t*.
Kunal Dethe el

Gracias amigo por esa información. Fue mi error. Actual estoy en el móvil. Voy a cambiar ese comando eairlier.
denny

Cheatsheet muy útil para esto
Hassan Baig el


6

Sí, puede obtener todas las claves al usar esto

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})

44
No es exactamente lo que el OP estaba pidiendo (redis-cli), pero gracias por señalar esto, sin embargo.
Herick

4

SCAN no requiere que el cliente cargue todas las claves en la memoria como lo hace KEYS. SCAN le ofrece un iterador que puede usar. Tenía un registro 1B en mi redis y nunca pude obtener suficiente memoria para devolver todas las claves a la vez.

Aquí hay un fragmento de Python para obtener todas las claves de la tienda que coincidan con un patrón y eliminarlas:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key

3
redis-cli -h <host> -p <port> keys * 

donde * es el patrón para enumerar todas las claves


2
Tenía que citar la estrella, de la siguiente manera:redis-cli -h <host> -p <port> keys '*'
aggregate1166877

3

Patrón de teclas

Disponible desde 1.0.0.

Complejidad de tiempo: O (N) con N siendo el número de claves en la base de datos, bajo el supuesto de que los nombres de clave en la base de datos y el patrón dado tienen una longitud limitada.

Devuelve todas las teclas que coinciden con el patrón.

Advertencia: No se recomienda usar este comando porque puede arruinar el rendimiento cuando se ejecuta en bases de datos grandes en lugar de KEYS, puede usar SCAN o SETS .

Ejemplo de comando KEYS para usar:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"

1

Si su redis es un clúster, puede usar este script

#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")

arr=($(echo "$redis_list" | tr ',' '\n'))

for info in ${arr[@]}; do
  echo "start :${info}"
  redis_info=($(echo "$info" | tr ':' '\n'))
  ip=${redis_info[0]}
  port=${redis_info[1]}
  echo "ip="${ip}",port="${port}
  redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
  redis-cli -c -h $ip -p $port keys \*

done

echo "end"

1

Consigue todas las llaves en Redis

Obtenga todas las claves usando la opción --scan:

$ redis-cli --scan --pattern '*'

Liste todas las teclas usando el comando KEYS:

$ redis-cli KEYS '*'

0

Para obtener todas las claves disponibles en el servidor redis, debe abrir redis-cli y escribir: KEYS * Para obtener más ayuda, visite esta página: Este enlace



0

Si está utilizando Laravel Framework, simplemente puede usar esto:

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

En Core PHP:

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);

0

Simplemente puede conectarse a su servidor redis usando redis-cli, seleccionar su base de datos y escribir KEYS *, recuerde que le dará todas las claves presentes en la base de datos redis seleccionada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.