test high create cluster cli cache redis

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.

http://redis.io/commands/dbsize


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