Redis'teki anahtar sayısını yazdırın


164

Redis'teki anahtar sayısını yazdırmanın bir yolu var mı?

Farkındayım

keys *

Ama bu biraz ağır ağırlık gibi görünüyor. - Redis'in önemli bir değer deposu olduğu göz önüne alındığında, belki de bunu yapmanın tek yolu budur. Ama yine de bir şeyler görmek istiyorum

count keys *

4
COUNT için bir çekme isteği var, ancak reddedildi. github.com/antirez/redis/pull/32 antirez ayrıca KEYS
Alex

O (n) gibi desteklemeselerdi merak ettim - sanırım bu doğrular.
andy çizme

Yanıtlar:


199

Sunucu hakkında bilgi ve istatistik döndüren INFO komutunu verebilirsiniz. GörmekÖrnek bir çıktı için buraya .

MVChr'un yorumlarında belirtildiği gibi, info keyspacedoğrudan redis-cli üzerinde kullanabilirsiniz .


1
redis-cli INFO Keyspace | grep ^db
Hackaholic

164

DBSIZE anahtar sayısını döndürür ve ayrıştırmak daha kolaydır.

Dezavantajı: Bir anahtarın süresi dolmuşsa yine de sayılabilir.

http://redis.io/commands/dbsize


3
Bu örnekte, KEYS *süresi dolmuş anahtar çıkarılır. Ayrıca Redis , süresi dolmuş bazı anahtarları aktif olarak tahliye edebilir , ancak bunların hepsini değil.
seppo0010

45

UYARI: Bunu bir üretim makinesinde çalıştırmayın.

Linux kutusunda:

redis-cli KEYS "*" | wc -l

Not: Aşağıdaki yorumlarda belirtildiği gibi, bu bir O (N) işlemidir, bu nedenle birçok anahtarlı büyük bir DB'de bunu kullanmamalısınız. Daha küçük dağıtımlar için iyi olmalıdır.


3
Son derece kullanışlı ve tuşlara da filtre uygulamanızı sağlar.
Nick Farina

25
Bu bir O (n) operasyonu, bunu O (1) 'de yapmanın bir yolu var mı?
Zoozy

21
Üretim ortamında büyük veritabanında kullanmayın. KEYS Komutu
Mantas

4
Birisi bunu okuyacak, bunu bir gün bir üretim kutusunun üzerinde düşünmeden yapacak ve daha sonra kenara itecek ... muhtemelen zaten oldu.
Stu Thompson

2
Bunun yalnızca üretim dışı sunucularda kullanılması için bir feragatnamesi olmalıdır. Aksi takdirde redis.io/commands/SCAN
whitfin

40

Toplam anahtar sayısını saymak için aşağıdaki komutu kullanın:

127.0.0.1:6379> DBSIZE



4

dbsize() toplam anahtar sayısını döndürür.

Anahtarları rastgele örnekleyerek ve daha sonra bunların hangi bölümünün kalıpla eşleştiğini kontrol ederek belirli bir kalıpla eşleşen anahtar sayısını hızlı bir şekilde tahmin edebilirsiniz.

Python'da örnek; ile başlayan tüm tuşları saymak 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

iter=100Benim durumumda bile iyi bir tahmin veriyor, ancak çok hızlı keys prefix_.

Bir iyileştirme, her istekte 1000 anahtar örneklemektir, ancak toplam sayıyı koruyun, böylece iki istekden sonra 2000'e bölüneceksiniz, üç istekden sonra 3000'e bölüneceksiniz. Bu nedenle, başvurunuz toplam sayı ile ilgileniyorsa anahtarları oldukça sık eşleştirerek, her seferinde gerçek değere yaklaştıkça.


1

Redis 2.6'dan sonra, INFO komutunun sonucu bölümlere ayrılır. "Anahtar boşluğu" bölümünde, kaç anahtar olduğunu söylemek için "anahtarlar" ve "süresi dolmuş anahtarlar" alanları bulunur.


4
Bu doğru değil. Bu bölümün örnek bir çıktısıdır: # Keyspace db0: keys = 366, expires = 366 Burada 'anahtarlar' toplam anahtar sayısını, 'son kullanma tarihi' ise son kullanma ayarlı anahtarların sayısını gösterir. Esasen, bir ttl kümesine sahip oldukları ve sürelerinin dolduğu değil, sürelerinin dolmaya ayarlandığı anlamına gelir.
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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.