Imprimer le nombre de clés dans Redis
Existe-t-il un moyen d'imprimer le nombre de clés dans Redis?
Je suis au courant de
keys *
Mais cela semble un peu lourd. - Étant donné que Redis est un magasin de valeur clé, c'est peut-être la seule façon de le faire. Mais je voudrais toujours voir quelque chose dans le sens de
count keys *
9 réponses
DBSIZE
renvoie le nombre de clés et il est plus facile à analyser.
Inconvénient: si une clé a expiré, elle peut toujours compter.
Avertissement: Ne l'exécutez pas sur une machine de production.
Sur une boîte Linux:
redis-cli KEYS "*" | wc -l
Note: comme mentionné dans les commentaires ci-dessous, il s'agit D'une opération O(N), donc sur une grande base de données avec beaucoup de clés, vous ne devriez pas l'utiliser. Pour les petits déploiements, ça devrait aller.
Utiliser DBSIZE
cela vous donnera pas de clé
Renvoie le nombre de clés dans la base de données actuellement sélectionnée.
Pour en savoir plus http://redis.io/commands/dbsize
Depuis Redis 2.6, lua est pris en charge, vous pouvez obtenir le nombre de clés génériques comme ceci
eval "return #redis.call('keys', 'prefix-*')" 0
Voir commande eval
Pour obtenir le nombre total de clés, utilisez la commande ci-dessous:
127.0.0.1:6379> DBSIZE
dbsize()
renvoie le nombre total de clés.
Vous pouvez estimer rapidement le nombre de clés correspondant à un motif donné en échantillonnant des clés au hasard, puis en vérifiant quelle fraction d'entre elles correspond au motif.
Exemple en python; compter toutes les clés commençant par 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
Même iter=100
donne une estimation décente dans mon cas, mais est très rapide, comparé à keys prefix_
.
Une amélioration consiste à échantillonner 1000 clés à chaque requête, mais à conserver le nombre total, de sorte qu'après deux demandes que vous diviserez par 2000, après trois demandes que vous diviserez par 3000. Ainsi, si votre application s'intéresse assez souvent au nombre total de clés correspondantes, elle se rapprochera de plus en plus de la valeur réelle.
Après Redis 2.6, le résultat de la commande INFO est divisé par sections. Dans la section "keyspace", il y a des champs" clés "et" clés expirées " pour indiquer combien de clés sont là.
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