Cetak jumlah kunci dalam Redis


164

Apakah ada cara untuk mencetak jumlah kunci di Redis?

saya sadar atas

keys *

Namun bobotnya sepertinya agak berat. - Mengingat bahwa Redis adalah toko nilai kunci mungkin ini adalah satu-satunya cara untuk melakukannya. Tapi aku masih ingin melihat sesuatu seperti itu

count keys *

4
Ada permintaan tarik untuk COUNT, namun ditolak. github.com/antirez/redis/pull/32 antirez juga mengomentari KEYS
Alex

Saya bertanya-tanya apakah mereka tidak mendukungnya karena itu O (n) - coba tebak ini menegaskannya.
andy boot

Jawaban:


199

Anda dapat mengeluarkan perintah INFO, yang mengembalikan informasi dan statistik tentang server. Lihat di sini untuk contoh keluaran.

Seperti disebutkan dalam komentar oleh mVChr, Anda dapat menggunakan info keyspacelangsung pada redis-cli.


1
redis-cli INFO Keyspace | grep ^db
Hackaholic

164

DBSIZE mengembalikan jumlah kunci dan lebih mudah untuk diuraikan.

Kelemahan: jika kunci telah kedaluwarsa, mungkin masih dihitung.

http://redis.io/commands/dbsize


3
Dalam contoh itu, KEYS *usir kunci yang kadaluarsa. Redis juga dapat secara aktif mengusir beberapa kunci kedaluwarsa, tetapi tidak harus semuanya.
seppo0010

45

PERINGATAN: Jangan jalankan ini di mesin produksi.

Di kotak Linux:

redis-cli KEYS "*" | wc -l

Catatan: Seperti disebutkan dalam komentar di bawah, ini adalah operasi O (N), jadi pada DB besar dengan banyak kunci Anda tidak boleh menggunakan ini. Untuk penyebaran yang lebih kecil, itu harus baik-baik saja.


3
Sangat berguna, dan memungkinkan Anda memfilter tombol juga.
Nick Farina

25
Itu operasi O (n), apakah ada cara untuk melakukan ini di O (1)?
Zoozy

21
Jangan gunakan pada database besar di lingkungan produksi. Command KEYS
Mantas

4
Seseorang akan membaca ini, melakukan ini pada kotak produksi suatu hari tanpa memikirkannya dan kemudian mendorongnya ... mungkin sudah terjadi.
Stu Thompson

2
Ini harus memiliki penafian untuk hanya digunakan pada server non-produksi. Kalau tidak, Anda harus menggunakan redis.io/commands/SCAN
whitfin

40

Untuk mendapatkan jumlah total kunci, gunakan perintah di bawah ini:

127.0.0.1:6379> DBSIZE



4

dbsize() mengembalikan jumlah kunci.

Anda dapat dengan cepat memperkirakan jumlah kunci yang cocok dengan pola yang diberikan dengan mengambil sampel kunci secara acak, lalu memeriksa fraksi mana yang cocok dengan pola tersebut.

Contoh dalam python; menghitung semua kunci dimulai dengan 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

Bahkan iter=100memberikan perkiraan yang layak dalam kasus saya, namun sangat cepat, dibandingkan dengan keys prefix_.

Perbaikan adalah untuk sampel 1000 kunci pada setiap permintaan, tetapi pertahankan jumlah total, sehingga setelah dua permintaan Anda akan membagi dengan 2000, setelah tiga permintaan Anda akan membagi dengan 3.000. Dengan demikian, jika aplikasi Anda tertarik pada jumlah total kunci yang cocok cukup sering, maka setiap kali akan semakin dekat dan semakin dekat dengan nilai sebenarnya.


1

Setelah Redis 2.6, hasil dari perintah INFO dipisahkan oleh bagian-bagian. Di bagian "keyspace", ada bidang "keys" dan "expired keys" untuk mengetahui berapa banyak kunci yang ada.


4
Ini tidak benar. Ini adalah contoh keluaran dari bagian ini: # Keyspace db0: keys = 366, kedaluwarsa = 366 Di sini, 'kunci' menunjukkan total tidak ada kunci dan 'kedaluwarsa' menunjukkan tidak ada kunci dengan set kedaluwarsa. Pada dasarnya itu berarti bahwa mereka memiliki satu set ttl dan mereka ditetapkan untuk kedaluwarsa, bukan bahwa mereka telah kedaluwarsa.
s1d

-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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.