Mi instancia de redis parece estar creciendo mucho y me gustaría saber cuál de las múltiples bases de datos que tengo allí consume cuánta memoria. El INFO
comando de Redis solo me muestra el tamaño total y la cantidad de claves por base de datos, lo que no me da mucha información ... Por lo tanto, cualquier herramienta / idea que me brinde más información al monitorear el servidor de Redis sería apreciada.
La documentación de Redis no me muestra ningún comando que pueda devolver la memoria consumida de ciertas claves, así que supongo que si algún código con errores escribiría mucha "basura" para redis, esto podría ser realmente difícil de encontrar ...
La solución de los comentarios merece su propia respuesta:
fuente
a
con un valor de 4GB, pero esto no se mostraría en bigkeys. (esto va por gist.github.com/michael-grunder/9257326 y docs.redislabs.com/latest/ri/memory-optimizations/… )MEMORY USAGE key
El comando le da la cantidad de bytes que una clave y su valor requieren para ser almacenados en la RAM.El uso informado es el total de asignaciones de memoria para datos y gastos administrativos que requiere una clave de su valor (documentación de fuente redis)
fuente
Eche un vistazo a este proyecto, genera algunas estadísticas interesantes sobre los espacios de teclas basadas en expresiones regulares y prefijos. Utiliza el
DEBUG OBJECT
comando y escanea la base de datos, identificando grupos de claves y estimando el porcentaje de espacio que ocupan.https://github.com/snmaynard/redis-audit
La salida se ve así:
O este: https://github.com/sripathikrishnan/redis-rdb-tools que hace un análisis completo en todo el espacio de claves analizando un archivo dump.rdb sin conexión. Este también funciona bien. Puede darle el tamaño promedio / mínimo / máximo para las entradas en su base de datos, e incluso lo hará basándose en un prefijo.
fuente
Puede resultarle muy útil probar claves de Redis y agruparlas por tipo. Salvatore ha escrito una herramienta llamada redis-sampler que emite alrededor de 10000
RANDOMKEY
comandos seguidos de lasTYPE
claves recuperadas. En cuestión de segundos o minutos, debería obtener una vista bastante precisa de la distribución de los tipos de claves.Escribí una extensión (desafortunadamente no en ningún lugar de código abierto porque está relacionada con el trabajo), que agrega un poco de introspección de los nombres de clave a través de expresiones regulares que le dan una idea de qué tipo de claves de aplicación (de acuerdo con la estructura de nombres que esté usando), se almacenan en Redis. Combinado con la salida más general de redis-sampler, esto debería darle una muy buena idea de lo que está sucediendo.
fuente
redis-cli --bigkeys
Quizás pueda hacer algo de introspección en el archivo db. El protocolo es relativamente simple (aunque no está bien documentado), por lo que podría escribir un analizador para determinar qué claves individuales ocupan mucho espacio.
Nuevas sugerencias:
¿Ha intentado usar
MONITOR
para ver lo que se está escribiendo en vivo? Quizás pueda encontrar el problema con los datos en movimiento.fuente
INFO
yMONITOR
, pero el principal problema es que cuando no estaba viendo Redis creció mucho ...Puede usar la aplicación .net https://github.com/abhiyx/RedisSizeCalculator para calcular el tamaño de la clave redis,
No dude en dar sus comentarios sobre el mismo
fuente
Por lo general, prefiero el método de muestreo de claves para solucionar estos escenarios.
P.ej:-
fuente
¿Qué tal redis-cli get KEYNAME | wc -c
fuente