Imprimir número de llaves en Redis


164

¿Hay alguna forma de imprimir el número de claves en Redis?

Estoy consciente de

keys *

Pero eso parece un poco pesado. - Dado que Redis es un almacén de valores clave, tal vez esta sea la única forma de hacerlo. Pero todavía me gustaría ver algo en la línea de

count keys *

44
Hay una solicitud de extracción para COUNT, aunque fue denegada. github.com/antirez/redis/pull/32 antirez también comentó en KEYS
Alex

Me preguntaba si no lo habrían apoyado, ya que sería O (n); supongo que esto lo confirma.
Andy arranque

Respuestas:


199

Puede emitir el comando INFO, que devuelve información y estadísticas sobre el servidor. Vea aquí para un ejemplo de salida.

Como se menciona en los comentarios de mVChr, puede usar info keyspacedirectamente en el redis-cli.


1
redis-cli INFO Keyspace | grep ^db
Hackaholic

164

DBSIZE devuelve el número de claves y es más fácil de analizar.

Desventaja: si una clave ha expirado, aún puede contar.

http://redis.io/commands/dbsize


3
En ese ejemplo, KEYS *desaloja la clave expirada. También Redis puede desalojar activamente algunas claves caducadas, pero no necesariamente todas.
seppo0010

45

ADVERTENCIA: No ejecute esto en una máquina de producción.

En una caja de Linux:

redis-cli KEYS "*" | wc -l

Nota: Como se menciona en los comentarios a continuación, esta es una operación O (N), por lo que en una base de datos grande con muchas teclas no debe usarla. Para implementaciones más pequeñas, debería estar bien.


3
Extremadamente práctico, y le permite filtrar las teclas también.
Nick Farina

25
Esa es una operación O (n), ¿hay alguna manera de hacer esto en O (1)?
Zoozy

21
No lo use en bases de datos grandes en entornos de producción. Comando KEYS
Mantas

44
Alguien va a leer esto, hacer esto en una caja de producción algún día sin pensarlo y luego empujarlo al límite ... probablemente ya ha sucedido.
Stu Thompson

2
Esto debería tener un descargo de responsabilidad para usar solo en servidores que no sean de producción. De lo contrario, debe usar redis.io/commands/SCAN
hasta

40

Para obtener el número total de teclas, use el siguiente comando:

127.0.0.1:6379> DBSIZE



4

dbsize() Devuelve el número total de claves.

Puede estimar rápidamente el número de claves que coinciden con un patrón dado al muestrear claves al azar y luego verificar qué fracción de ellas coincide con el patrón.

Ejemplo en python; contando todas las claves que comienzan 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

Incluso iter=100da una estimación decente en mi caso, pero es muy rápido, en comparación con keys prefix_.

Una mejora es probar 1000 claves en cada solicitud, pero mantener el recuento total, de modo que después de dos solicitudes se dividirá por 2000, después de tres solicitudes se dividirá por 3000. Por lo tanto, si su aplicación está interesada en el número total de teclas coincidentes con bastante frecuencia, luego cada vez se acercará más y más al valor real.


1

Después de Redis 2.6, el resultado del comando INFO se divide por secciones. En la sección "espacio de claves", hay campos "claves" y "claves caducadas" para indicar cuántas claves hay.


44
Esto no es correcto. Esta es una salida de muestra de la sección: # Keyspace db0: keys = 366, expires = 366 Aquí, 'keys' indica el número total de claves y 'expires' indica que no hay claves con el conjunto de caducidad. Esencialmente significa que tienen un conjunto ttl y están configurados para expirar, no que hayan expirado.
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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.