Redis comando para obter todas as chaves disponíveis?

502

Existe um comando Redis para buscar todas as chaves no banco de dados? Eu vi algumas bibliotecas python-redis buscando-as. Mas queria saber se é possível do redis-client.

Lalith
fonte

Respostas:

721

Tente olhar para o KEYScomando. KEYS *listará todas as chaves armazenadas em redis.

EDIT: observe o aviso na parte superior da KEYSpágina de documentação:

Complexidade de tempo: O (N) com N sendo o número de chaves no banco de dados, supondo que os nomes das chaves no banco de dados e o padrão fornecido tenham um comprimento limitado.

UPDATE (V2.8 ou superior): SCAN é uma alternativa superior a KEYS, no sentido de que não bloqueia o servidor nem consome recursos significativos. Prefere usá-lo.

yojimbo87
fonte
96
Exemplo de uso da CLI:redis-cli keys "*"
XåpplI'-I0llwlg'I - 28/11
4
Correção: Todos os comandos redis são de thread único e bloquearão o servidor. A única diferença é que KEYStem o potencial de bloquear o servidor por mais tempo ao consultar um grande conjunto de dados #
315
155

Atualizado para Redis 2.8 e superior

Conforme observado nos comentários das respostas anteriores a esta pergunta, KEYSé um comando potencialmente perigoso, pois o servidor Redis não estará disponível para realizar outras operações enquanto ele o servir. Outro risco KEYSé que ele pode consumir (dependendo do tamanho do seu espaço de chaves) muita RAM para preparar o buffer de resposta, esgotando a memória do servidor.

A versão 2.8 do Redis havia introduzido a família de comandos SCAN, que são muito mais educados e podem ser usados ​​para o mesmo objetivo.

A CLI também fornece uma boa maneira de trabalhar com ela:

$ redis-cli --scan --pattern '*'
Itamar Haber
fonte
59

Pode acontecer que, usando o redis-cli, você se conecte ao seu redis-server remoto e, em seguida, ao comando:

KEYS *

não está mostrando nada, ou melhor, mostra:
(empty list or set)

Se você tiver certeza absoluta de que o servidor Redis que você usa é o que possui os dados, talvez seu redis-cli não esteja se conectando à instância correta do banco de dados Redis.

Conforme mencionado nos documentos do Redis, novas conexões se conectam como padrão ao db 0 .

No meu caso, o KEYScomando não estava recuperando resultados porque meu banco de dados era 1. Para selecionar o banco de dados desejado, use SELECT .
O banco de dados é identificado por um número inteiro.

SELECT 1
KEYS *

Postei essas informações porque nenhuma das respostas anteriores estava resolvendo meu problema.

Evhz
fonte
31

-> Obtenha todas as chaves de redis-cli

-redis 127.0.0.1:6379> keys *

-> Obter lista de padrões

-redis 127.0.0.1:6379> keys d??

Isso produzirá chaves que começam com 'd' com três caracteres.

-redis 127.0.0.1:6379> keys *t*

Isso obterá chaves com o caractere 't' correspondente na chave

-> Contar chaves da linha de comando por

-redis-cli keys * |wc -l

-> Ou você pode usar dbsize

-redis-cli dbsize
denny
fonte
Apenas copiei as respostas e tentei. Deu "comando desconhecido 'chave'". "chave" não é o comando, "chaves" é. Corrija key *t*para keys *t*.
precisa saber é o seguinte
Obrigado cara por essa informação. Foi o meu erro. Atualmente estou no celular. Vou mudar esse comando mais rápido.
Denny
Cheatsheet muito útil isso
Hassan Baig
19

Dê uma olhada no seguinte Redis Cheat Sheet . Para obter um subconjunto de chaves redis com o redis-cli, uso o comando

KEYS "prefix:*"
wami
fonte
6

Sim, você pode obter todas as chaves usando este

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})
Albin Mathew
fonte
4
Não é exatamente o que o OP estava pedindo (redis-cli), mas obrigado por apontar isso, no entanto.
Herick
4

O SCAN não exige que o cliente carregue todas as chaves na memória, como o KEYS. SCAN fornece um iterador que você pode usar. Eu tinha um registro de 1B nos meus redis e nunca consegui ter memória suficiente para retornar todas as chaves de uma só vez.

Aqui está um trecho de python para obter todas as chaves da loja que correspondem a um padrão e excluí-las:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key
Patrick Collins
fonte
3
redis-cli -h <host> -p <port> keys * 

onde * é o padrão para listar todas as chaves

gobi
fonte
2
Eu tive que citar a estrela, da seguinte maneira:redis-cli -h <host> -p <port> keys '*'
agregate1166877
3

Padrão de CHAVES

Disponível desde 1.0.0.

Complexidade de tempo: O (N) com N sendo o número de chaves no banco de dados, supondo que os nomes das chaves no banco de dados e o padrão fornecido tenham um comprimento limitado.

Retorna todas as chaves correspondentes ao padrão.

Aviso: Este comando não é recomendado, pois pode prejudicar o desempenho quando executado em bancos de dados grandes, em vez de KEYS, você pode usar SCAN ou SETS .

Exemplo de comando KEYS a ser usado:

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
fonte
1

Se seu redis for um cluster, você poderá 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
fonte
1

Obter todas as chaves em Redis

Obtenha todas as chaves usando a opção --scan:

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

Liste todas as chaves usando o comando KEYS:

$ redis-cli KEYS '*'
Netwons
fonte
0

Para obter todas as chaves disponíveis no servidor redis, você deve abrir o redis-cli e digitar: KEYS * Para obter mais ajuda, visite esta página: Este link

behzad babaei
fonte
0

Se você estiver usando o Laravel Framework, poderá simplesmente usar o seguinte:

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

print_r($allKeyList);

No PHP principal:

$redis = new Redis();

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

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

print_r($allKeyList);
Vinay Singh
fonte
0

Você pode simplesmente se conectar ao seu servidor redis usando redis-cli, selecionar seu banco de dados e digitar KEYS *, lembre-se de que ele fornecerá todas as chaves presentes no banco de dados redis selecionado.

user1157635
fonte