Respuestas:
Intenta mirar el KEYS
comando. KEYS *
enumerará todas las claves almacenadas en redis.
EDITAR: tenga en cuenta la advertencia en la parte superior de la KEYS
pá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.
KEYS
tiene el potencial de bloquear el servidor durante más tiempo cuando se consulta un conjunto de datos grande
Actualizado para Redis 2.8 y superior
Como se señaló en los comentarios de respuestas anteriores a esta pregunta, KEYS
es un comando potencialmente peligroso ya que su servidor Redis no estará disponible para realizar otras operaciones mientras lo atiende. Otro riesgo KEYS
es 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 '*'
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 KEYS
comando 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.
-> 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
key *t*
a keys *t*
.
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:*"
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) {
})
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
redis-cli -h <host> -p <port> keys *
donde * es el patrón para enumerar todas las claves
redis-cli -h <host> -p <port> keys '*'
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"
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"
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
Deberíamos usar --scan --pattern con redis 2.8 y posterior.
Puedes intentar usar este envoltorio encima de redis-cli. https://github.com/VijayantSoni/redis-helper
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);
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.
redis-cli keys "*"