Wydrukuj liczbę kluczy w Redis


164

Czy istnieje sposób wydrukowania liczby kluczy w Redis?

Jestem świadomy

keys *

Ale to wydaje się nieco ciężkie. - Biorąc pod uwagę, że Redis jest magazynem kluczowych wartości, być może jest to jedyny sposób, aby to zrobić. Ale nadal chciałbym zobaczyć coś podobnego do

count keys *

4
Istnieje żądanie ściągnięcia dotyczące COUNT, ale zostało odrzucone. github.com/antirez/redis/pull/32 antirez również skomentował KEYS
Alex

Zastanawiałem się, czy nie poparli go tak, jak byłoby O (n) - chyba to potwierdza.
andy boot

Odpowiedzi:


199

Możesz wydać polecenie INFO, które zwróci informacje i statystyki dotyczące serwera. Zobacz tutaj przykładowe dane wyjściowe.

Jak wspomniano w komentarzach mVChr, możesz używać info keyspacebezpośrednio w redis-cli.


1
redis-cli INFO Keyspace | grep ^db
Hackaholic

164

DBSIZE zwraca liczbę kluczy i jest łatwiejsza do przeanalizowania.

Wada: jeśli klucz wygasł, nadal może się liczyć.

http://redis.io/commands/dbsize


3
W tym przykładzie KEYS *wyklucza wygasły klucz. Redis może również aktywnie eksmitować niektóre wygasłe klucze, ale niekoniecznie wszystkie.
seppo0010

45

OSTRZEŻENIE: Nie uruchamiaj tego na maszynie produkcyjnej.

Na komputerze z systemem Linux:

redis-cli KEYS "*" | wc -l

Uwaga: Jak wspomniano w komentarzach poniżej, jest to operacja O (N), więc w dużej bazie danych z wieloma kluczami nie należy jej używać. W przypadku mniejszych wdrożeń powinno być dobrze.


3
Niezwykle poręczny i pozwala także filtrować klawisze.
Nick Farina

25
To jest operacja O (n), czy istnieje sposób, aby to zrobić w O (1)?
Zoozy

21
Nie używaj na dużej bazie danych w środowisku produkcyjnym. KEYS Command
Mantas

4
Ktoś to przeczyta, zrobi to któregoś dnia na pudełku produkcyjnym bez przemyślenia, a potem przepchnie to przez krawędź ... prawdopodobnie już się stało.
Stu Thompson

2
Powinno zawierać zastrzeżenie, którego można używać tylko na serwerach nieprodukcyjnych. W przeciwnym razie powinieneś użyć redis.io/commands/SCAN
whitfin

40

Aby uzyskać całkowitą liczbę kluczy, użyj poniższego polecenia:

127.0.0.1:6379> DBSIZE



4

dbsize() zwraca całkowitą liczbę kluczy.

Możesz szybko oszacować liczbę kluczy pasujących do danego wzorca, próbując losowo klucze, a następnie sprawdzając, jaka część z nich pasuje do wzorca.

Przykład w Pythonie; liczenie wszystkich kluczy zaczynających się od 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

Nawet iter=100daje przyzwoitą ocenę w moim przypadku, ale jest bardzo szybka w porównaniu do keys prefix_.

Ulepszeniem jest próbkowanie 1000 kluczy przy każdym żądaniu, ale zachowaj łączną liczbę, aby po dwóch żądaniach podzielić przez 2000, po trzech żądaniach podzielić przez 3000. Zatem, jeśli aplikacja jest zainteresowana łączną liczbą dopasowania kluczy dość często, to za każdym razem będzie coraz bliżej prawdziwej wartości.


1

Po wersji Redis 2.6 wynik polecenia INFO jest dzielony na sekcje. W sekcji „przestrzeń kluczowa” znajdują się pola „klucze” i „wygasłe klucze”, które wskazują liczbę kluczy.


4
To nie jest poprawne. Oto przykładowe dane wyjściowe sekcji: # Keyspace db0: keys = 366, expires = 366 W tym przypadku „keys” oznacza całkowitą liczbę kluczy, a „expires” wskazuje liczbę kluczy z ustawionym terminem ważności. Zasadniczo oznacza to, że mają ustawione ttl i mają wygasnąć, a nie, że wygasły.
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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.