Stampa il numero di chiavi in ​​Redis


164

C'è un modo per stampare il numero di chiavi in ​​Redis?

Ne sono consapevole

keys *

Ma sembra un po 'pesante. - Dato che Redis è un archivio di valori chiave, forse questo è l'unico modo per farlo. Ma vorrei ancora vedere qualcosa sulla falsariga di

count keys *

4
C'è una richiesta pull per COUNT, ma è stata negata. github.com/antirez/redis/pull/32 antirez ha anche commentato KEYS
Alex

Mi chiedevo se non lo avessero supportato come sarebbe O (n) - suppongo che questo lo confermi.
Andy Boot,

Risposte:


199

È possibile emettere il comando INFO, che restituisce informazioni e statistiche sul server. Vedi qui per un esempio di output.

Come menzionato nei commenti di mVChr, puoi usare info keyspacedirettamente sul redis-cli.


1
redis-cli INFO Keyspace | grep ^db
Hackaholic,

164

DBSIZE restituisce il numero di chiavi ed è più facile da analizzare.

Unico inconveniente: se una chiave è scaduta, può comunque contare.

http://redis.io/commands/dbsize


3
In questo esempio, KEYS *elimina la chiave scaduta. Inoltre, Redis può eliminare attivamente alcune chiavi scadute, ma non necessariamente tutte.
seppo0010

45

ATTENZIONE: non eseguirlo su una macchina di produzione.

Su un box Linux:

redis-cli KEYS "*" | wc -l

Nota: come menzionato nei commenti seguenti, si tratta di un'operazione O (N), quindi su un DB di grandi dimensioni con molte chiavi non è necessario utilizzarlo. Per distribuzioni più piccole, dovrebbe andare bene.


3
Estremamente utile e consente anche di filtrare i tasti.
Nick Farina,

25
Questa è un'operazione O (n), c'è un modo per farlo in O (1)?
Zoozy,

21
Non utilizzare su database di grandi dimensioni in ambiente di produzione. Comando CHIAVI
Mantas,

4
Qualcuno sta per leggere questo, farlo un giorno su una scatola di produzione senza pensarci su e poi spingerlo oltre il limite ... probabilmente è già successo.
Stu Thompson

2
Questo dovrebbe avere un disclaimer da usare solo su server non di produzione. Altrimenti dovresti usare redis.io/commands/SCAN
entro

40

Per ottenere il numero totale di chiavi, utilizzare il comando seguente:

127.0.0.1:6379> DBSIZE



4

dbsize() restituisce il numero totale di chiavi.

È possibile stimare rapidamente il numero di chiavi corrispondenti a un determinato modello campionando le chiavi a caso, quindi controllando quale frazione di esse corrisponde al modello.

Esempio in Python; contando tutti i tasti che iniziano con prefix_:

import redis
r = redis.StrictRedis(host = 'localhost', port=6379)
iter=1000
print 'Approximately', r.dbsize() * float(sum([r.randomkey().startswith('prefix_') for i in xrange(iter)])) / iter

Anche iter=100nel mio caso dà una stima decente, ma è molto veloce, rispetto a keys prefix_.

Un miglioramento consiste nel campionare 1000 chiavi per ogni richiesta, ma mantenere il conteggio totale, in modo che dopo due richieste dividerete per 2000, dopo tre richieste dividerete per 3000. Pertanto, se la vostra applicazione è interessata al numero totale di abbinare le chiavi abbastanza spesso, quindi ogni volta si avvicina sempre di più al valore reale.


1

Dopo Redis 2.6, il risultato del comando INFO è diviso per sezioni. Nella sezione "Spazio chiavi", ci sono i campi "chiavi" e "chiavi scadute" per indicare quante chiavi ci sono.


4
Questo non è corretto Questo è un esempio di output della sezione: # Keyspace db0: keys = 366, expires = 366 Qui, 'keys' indica il totale no di chiavi e 'expires' indica no di chiavi con scadenza impostata. In sostanza significa che hanno un set ttl e sono destinati a scadere, non che siano scaduti.
°

-1
eval "local count = redis.call('scan', 0, 'match', 'key:*:key', 'count', 10000) if count ~= 0 then return #count[2] end " 0

eval "local count = redis.call('sscan', 'key.key:all', 0, 'match', '*', 'count', 1000000) if count ~= 0 then return #count[2] end " 0
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.