Cómo solucionar problemas en Redis

Introducción

Redis es un almacén de datos de clave-valor de código abierto en memoria. Viene con varios comandos que pueden ayudar con la resolución de incidentes y problemas de depuración.

Debido a la naturaleza de Redis como un almacén de clave/valor en memoria, muchos de estos comandos se centran en la administración de memoria, pero hay otros que son valiosos para proporcionar una visión general del estado de tu servidor Redis.

Este tutorial proporcionará detalles sobre cómo usar algunos de estos comandos, esto para ayudar a diagnosticar y resolver problemas que puedas encontrar al usar Redis.

Cómo usar esta guía

Esta guía está escrita como una hoja de trucos con ejemplos independientes. Te recomendamos que saltes a cualquier sección que sea relevante para la tarea que estás tratando de completar.

Los comandos y resultados que se muestran en esta guía se probaron en un servidor Ubuntu 18.04 con Redis versión 4.0.9.

Para obtener una configuración similar, puede seguir el Paso 1 de nuestra guía sobre Cómo instalar y proteger Redis en Ubuntu. Vamos a demostrar cómo se comportan estos comandos ejecutándolos con redis-cli la interfaz de línea de comandos de Redis. Ten en cuenta que si estás utilizando una interfaz Redis diferente, Redli, por ejemplo, las salidas exactas de ciertos comandos pueden diferir.

Alternativamente, puedes aprovisionar una instancia de base de datos Redis administrada para probar estos comandos, pero ten en cuenta que, dependiendo del nivel de control permitido por tu proveedor de base de datos, algunos comandos en esta guía pueden no funcionar como se describe.

Para aprovisionar una base de datos administrada, debes seguir la documentación del producto de bases de datos administradas de tu proveedor. Luego, debes instalar Redli o configurar un túnel TLS para conectarte a la Base de datos administrada a través de TLS.

Solución de problemas relacionados con la memoria

memory usage te indica cuánta memoria está utilizando actualmente una sola clave. Toma el nombre de una clave como argumento y genera la cantidad de bytes que usa:

Para una comprensión más general de cómo tu servidor Redis está utilizando la memoria, puedes ejecutar el comando memory stats:

Este comando genera una matriz de métricas relacionadas con la memoria y sus valores. Las siguientes son las métricas proporcionadas por memory stats:

  • peak.allocated: El número máximo de bytes consumidos por Redis
  • total.allocated: El número total de bytes asignados por Redis
  • startup.allocated: El número inicial de bytes consumidos por Redis al inicio
  • replication.backlog: El tamaño de la acumulación de réplica, en bytes
  • clients.slaves: El tamaño total de todos los gastos generales de réplica (los búferes de salida y consulta y los contextos de conexión)
  • clients.normal: El tamaño total de todos los gastos generales del cliente
  • aof.buffer: El tamaño total de los búferes de archivos actuales y reescribir solo para agregar.
  • db.0: Los gastos generales de los diccionarios principales y de vencimiento para cada base de datos en uso en el servidor, informados en bytes
  • overhead.total: La suma de todos los gastos generales utilizados para administrar el espacio de teclas de Redis
  • keys.count: El número total de claves almacenadas en todas las bases de datos en el servidor
  • keys.bytes-per-key: La relación entre el uso de memoria neta del servidor y keys.count
  • dataset.bytes: El tamaño del conjunto de datos, en bytes
  • dataset.percentage: El porcentaje del uso de memoria neta de Redis tomado por dataset.bytes
  • peak.percentage: El porcentaje de peak.allocated extraído de total.allocated
  • fragmentation: La proporción de la cantidad de memoria actualmente en uso, dividida entre la memoria física que Redis está utilizando realmente

Asignación de memoria

memory malloc-stats proporciona un informe estadístico interno de jemalloc, el asignador de memoria utilizado por Redis en sistemas Linux:

Si parece que tienes problemas relacionados con la memoria, pero analizar el resultado de los comandos anteriores no es útil, puedes intentar ejecutar memory doctor:

Esta característica generará cualquier problema de consumo de memoria que puedas encontrar y sugerir posibles soluciones.

Obtención de información general sobre tu instancia de Redis

Un comando de depuración que no está directamente relacionado con la administración de memoria es monitor. Este comando te permite ver un flujo constante de cada comando procesado por el servidor Redis:

Otro comando útil para la depuración es info, que devuelve varios bloques de información y estadísticas sobre el servidor:

Este comando devuelve mucha información. Si solo deseas ver un bloque de información, puedes especificarlo como argumento para info:

Ten en cuenta que la información devuelta por el comando info dependerá de la versión de Redis que estés utilizando.

Usando el comandokeys

El comando keys es útil en casos en los que has olvidado el nombre de una clave, o tal vez has creado una pero accidentalmente has escrito mal su nombre. keys busca claves que coincidan con un patrón:

Se admiten las siguientes variables de estilo globales

  • ? es un comodín para cualquier carácter individual, por ejemplo s?mmy busca las coincidencias sammy, sommy y sqmmy
  • * es un comodín que representa cualquier número de caracteres, incluyendo no caracteres en todos, por lo sa*y busca todas las coincidencias sammy, say, sammmmmmy, y salmony
  • Puedes especificar dos o más caracteres que el patrón puede incluir encerrándolos entre paréntesis, para que s[ai]mmy coincidan sammysimmy, pero no summy
  • Para establecer un comodín que no tenga en cuenta una o más letras, enciérralas entre paréntesis y precédelas con este símbolo (^), para que s[^oi]mmy coincida sammysxmmy, pero no con sommy o simmy.
  • Para establecer un comodín que incluye una serie de letras, debes separar el principio y el final del rango con un guion y enciérralas entre corchetes, por lo que s[a-o]mmy coincidirá con sammy, skmmysommy, aunque no con srmmy

Advertencia: la documentación de Redis advierte que keys casi nunca se debe usar en un entorno de producción, ya que puede tener un impacto negativo importante en el rendimiento.

Conclusión

Esta guía detalla una serie de comandos que son útiles para la solución de incidentes y la resolución de problemas que uno podría encontrar al trabajar con Redis. Si hay otros comandos, argumentos o procedimientos relacionados que te gustaría ver descritos en esta guía, pregunta o has las sugerencias en los comentarios a continuación.