high - Imprimir número de claves en Redis
redis high availability (9)
Dado que Redis 2.6, lua es compatible, puede obtener la cantidad de claves comodín como esta
eval "return #redis.call(''keys'', ''prefix-*'')" 0
ver el comando eval
¿Hay alguna forma de imprimir la cantidad de claves en Redis?
Estoy consciente de
keys *
Pero eso parece un poco pesado. - Dado que Redis es una tienda de valores clave, tal vez esta sea la única forma de hacerlo. Pero aún me gustaría ver algo parecido a
count keys *
Después de Redis 2.6, el resultado del comando INFO se divide por secciones. En la sección "espacio de teclas", hay campos de "teclas" y "teclas caducadas" para indicar cuántas teclas hay.
Para obtener el número total de claves, use el siguiente comando:
127.0.0.1:6379> DBSIZE
Puede emitir el comando INFO, que devuelve información y estadísticas sobre el servidor. Vea here para un resultado de ejemplo.
Como se mencionó en los comentarios de mVChr, puede usar el info keyspace
directamente en el redis-cli.
use DBSIZE
esto no le dará ninguna clave
Devuelve el número de claves en la base de datos seleccionada actualmente.
para leer más http://redis.io/commands/dbsize
DBSIZE
devuelve el número de claves y es más fácil de analizar.
Desventaja: si una llave ha expirado, aún puede contar.
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 las claves al azar y luego verificar qué fracción de ellas coincide con el patrón.
Ejemplo en python; contando todas las llaves 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=100
da una estimación decente en mi caso, pero es muy rápido, en comparación con las keys prefix_
.
Una mejora es muestrear 1000 claves en cada solicitud, pero mantenga el recuento total, de modo que después de dos solicitudes dividirá en 2000, después de tres solicitudes dividirá por 3000. Por lo tanto, si su aplicación está interesada en el número total de las claves coincidentes con bastante frecuencia, luego cada vez se acercará más y más al verdadero valor.
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 claves no debe usar esto. Para implementaciones más pequeñas, debería estar bien.
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