Comando Redis per ottenere tutte le chiavi disponibili?


503

Esiste un comando Redis per recuperare tutte le chiavi nel database? Ho visto alcune librerie di Python-Redis che le stavano recuperando. Ma mi chiedevo se fosse possibile da redis-client.

Risposte:


722

Prova a guardare il KEYScomando. KEYS *elencherà tutti i tasti memorizzati in redis.

MODIFICA: notare l'avvertenza nella parte superiore della KEYSpagina della documentazione:

Complessità temporale: O (N) con N pari al numero di chiavi nel database, presupponendo che i nomi delle chiavi nel database e il modello specificato abbiano una lunghezza limitata.

AGGIORNAMENTO (V2.8 o superiore): SCAN è un'alternativa superiore a KEYS, nel senso che non blocca il server né consuma risorse significative. Preferisco usarlo.


96
Esempio di utilizzo della CLI:redis-cli keys "*"
XåpplI'-I0llwlg'I -

4
Correzione: tutti i comandi redis sono a thread singolo e bloccano il server. L'unica differenza è che KEYSha il potenziale di bloccare il server più a lungo quando si esegue una query su un set di dati di grandi dimensioni
Leo,

156

Aggiornato per Redis 2.8 e versioni successive

Come notato nei commenti delle risposte precedenti a questa domanda, KEYSè un comando potenzialmente pericoloso poiché il server Redis non sarà disponibile per eseguire altre operazioni mentre lo serve. Un altro rischio KEYSè che può consumare (a seconda delle dimensioni del proprio spazio chiavi) molta RAM per preparare il buffer di risposta, esaurendo quindi la memoria del server.

La versione 2.8 di Redis aveva introdotto la famiglia di comandi SCAN che sono molto più educati e possono essere usati per lo stesso scopo.

L'interfaccia della riga di comando fornisce anche un modo semplice di lavorare con esso:

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

59

Può succedere che usando redis-cli ci si connetta al proprio redis-server remoto e quindi il comando:

KEYS *

non mostra nulla, o meglio, mostra:
(empty list or set)

Se sei assolutamente sicuro che il server Redis che usi è quello in cui hai i dati, forse il tuo redis-cli non si connette all'istanza corretta del database Redis.

Come menzionato nei documenti Redis, le nuove connessioni si connettono come impostazione predefinita al db 0 .

Nel mio caso il KEYScomando non stava recuperando i risultati perché il mio database era 1. Per selezionare il db desiderato, utilizzare SELEZIONA .
Il db è identificato da un numero intero.

SELECT 1
KEYS *

Pubblico queste informazioni perché nessuna delle risposte precedenti stava risolvendo il mio problema.


31

-> Ottieni tutte le chiavi da redis-cli

-redis 127.0.0.1:6379> keys *

-> Ottieni l'elenco dei modelli

-redis 127.0.0.1:6379> keys d??

Questo produrrà i tasti che iniziano con 'd' con tre caratteri.

-redis 127.0.0.1:6379> keys *t*

Questo otterrà le chiavi con il carattere "t" corrispondente nella chiave

-> Contare i tasti dalla riga di comando da

-redis-cli keys * |wc -l

-> Oppure puoi usare dbsize

-redis-cli dbsize

Ho appena copiato le risposte e provato. Ha dato "comando 'chiave' sconosciuto". "chiave" non è il comando, "chiavi" lo è. Si prega di correggere key *t*a keys *t*.
Kunal Dethe,

Grazie amico per quell'informazione. È stato un mio errore.
Denny,

Cheatsheet molto utile questo
Hassan Baig

19

Dai un'occhiata al seguente Redis Cheat Sheet . Per ottenere un sottoinsieme di chiavi redis con il redis-cli uso il comando

KEYS "prefix:*"

6

Sì, puoi ottenere tutte le chiavi usando questo

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

4
Non esattamente ciò che l'OP stava chiedendo (redis-cli), ma grazie per averlo sottolineato.
Herick, l'

4

SCAN non richiede al client di caricare tutte le chiavi in ​​memoria come fa KEYS. SCAN ti offre un iteratore che puoi usare. Avevo un record da 1B nel mio redis e non riuscivo mai a ottenere abbastanza memoria per restituire tutte le chiavi contemporaneamente.

Ecco uno snippet di pitone per ottenere tutte le chiavi dal negozio corrispondenti a un modello ed eliminarle:

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 * 

dove * è il modello per elencare tutti i tasti


2
Ho dovuto citare la stella come segue:redis-cli -h <host> -p <port> keys '*'
aggregato1166877

3

Modello CHIAVI

Disponibile dalla 1.0.0.

Complessità temporale: O (N) con N come numero di chiavi nel database, supponendo che i nomi delle chiavi nel database e il modello dato abbiano una lunghezza limitata.

Restituisce tutti i tasti corrispondenti al modello.

Avviso: non è consigliabile utilizzare questo comando poiché potrebbe compromettere le prestazioni quando viene eseguito su database di grandi dimensioni anziché KEYS che è possibile utilizzare SCAN o SET .

Esempio di comando KEYS da usare:

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

Se il tuo redis è un cluster, puoi usare questo 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

Ottieni tutte le chiavi in ​​Redis

Ottieni tutte le chiavi usando l'opzione --scan:

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

Elenca tutti i tasti usando il comando KEYS:

$ redis-cli KEYS '*'

0

Per ottenere tutte le chiavi disponibili nel server redis, è necessario aprire redis-cli e digitare: KEYS * Per ottenere ulteriore assistenza, visitare questa pagina: Questo collegamento



0

Se stai usando Laravel Framework, puoi semplicemente usare questo:

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

print_r($allKeyList);

Nel core PHP:

$redis = new Redis();

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

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

print_r($allKeyList);

0

Puoi semplicemente collegarti al tuo server redis usando redis-cli, selezionare il tuo database e digitare KEYS *, ricorda che ti darà tutte le chiavi presenti nel database redis selezionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.