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.

Lalith
fuente

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.

yojimbo87
fuente
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 '*'
Itamar Haber
fuente
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.

Evhz
fuente
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
denny
fuente
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
19

Echa un vistazo a la siguiente hoja de trucos de Redis . Para obtener un subconjunto de teclas redis con redis-cli, uso el comando

KEYS "prefix:*"
wami
fuente
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) {
})
Albin Mathew
fuente
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
Patrick Collins
fuente
3
redis-cli -h <host> -p <port> keys * 

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

gobi
fuente
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"
anandchaugule
fuente
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"
byte mamba
fuente
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 '*'
Netwons
fuente
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

Behzad Babaei
fuente
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);
Vinay Singh
fuente
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.

usuario1157635
fuente