Redis es un almacenamiento de datos basado en memoria, por lo que la gestión de la memoria tiene un impacto crítico en el rendimiento del sistema. Almacenar datos en la memoria de forma continua puede provocar problemas de falta de memoria. En esta publicación, exploraremos las configuraciones y métodos clave para la gestión de memoria y la optimización del rendimiento en Redis.

1. Importancia de la gestión de memoria en Redis

Redis almacena todos los datos en la memoria para procesarlos rápidamente. Si se almacena una gran cantidad de datos o se realizan operaciones de escritura de manera continua, puede haber una disminución en el rendimiento debido a la falta de memoria. Para prevenir estos problemas, Redis proporciona configuraciones de maxmemory y maxmemory-policy.

Infografía sobre gestión de memoria de Redis

2. Configuración del límite de memoria: maxmemory

Para limitar el uso máximo de memoria, se configura maxmemory. Esta configuración permite especificar claramente la cantidad de memoria que puede usar Redis. Si no se establece maxmemory, podrá utilizarse hasta el límite de la memoria del sistema.

maxmemory 256mb  # Ejemplo: establecido en 256MB

Si se supera el límite de memoria especificado, Redis podrá eliminar automáticamente datos antiguos según la política de eliminación de datos.

3. Configuración de la política de eliminación de memoria: maxmemory-policy

La política que decide qué datos eliminar cuando se supera el límite de memoria se llama maxmemory-policy. Redis proporciona diversas políticas de eliminación, y las principales opciones son las siguientes:

  • noeviction: rechaza el almacenamiento de nuevos datos para minimizar la pérdida de datos
  • allkeys-lru: elimina la clave menos recientemente utilizada entre todas para ser adecuada para uso en caché
  • volatile-lru: elimina la clave menos recientemente utilizada entre las claves con tiempo de expiración configurado
  • allkeys-random: elimina datos aleatoriamente entre todas las claves
  • volatile-ttl: elimina la clave con el tiempo de expiración más corto

Por ejemplo, para establecer la política LRU que elimina datos antiguos entre todas las claves, se hace de la siguiente manera.

maxmemory-policy allkeys-lru

4. Configuración de optimización de memoria: maxmemory-samples

La opción maxmemory-samples establece el número de datos a muestrear al aplicar la política de memoria, y el valor por defecto es 5. Aumentar el número de muestras permite aplicar una política más precisa, aunque puede consumir muchos recursos de CPU.

maxmemory-samples 5

5. Configuración de TTL para compresión y eliminación de datos

Redis permite configurar un TTL (tiempo de expiración) por clave, y si una clave expira, se elimina automáticamente para liberar memoria. Esto es útil para la gestión de sesiones o datos en caché.

EXPIRE <clave> <segundos>  # Ejemplo: expira session_data en 1 hora

Los datos con TTL configurados se eliminan automáticamente después de un tiempo, lo que es efectivo para ahorrar memoria.

6. Comandos de monitoreo de memoria y verificación de rendimiento

Redis proporciona comandos para monitorear el estado de la memoria y verificar el rendimiento.

  • INFO memory: verifica el uso total de memoria
  • MEMORY USAGE <clave>: verifica el uso de memoria de una clave específica
  • MEMORY STATS: proporciona estadísticas detalladas de memoria
  • SLOWLOG: permite verificar comandos lentos para evaluación de rendimiento
redis-cli INFO memory
redis-cli MEMORY USAGE session_data
redis-cli SLOWLOG GET

7. Ejemplo práctico: Optimización de memoria de Redis para datos en caché y colas de trabajo

En Redis, se puede utilizar la política allkeys-lru para eliminar automáticamente datos antiguos destinados a datos en caché. Por otro lado, en situaciones donde es crucial conservar datos, como en colas de trabajo, se puede establecer la política noeviction y habilitar la función AOF (Append-Only File) para permitir la recuperación de datos.

maxmemory 256mb
maxmemory-policy allkeys-lru  # Adecuado para datos en caché

appendonly yes
appendfsync everysec
maxmemory-policy noeviction  # Adecuado para colas de trabajo

Conclusión

Hemos examinado los métodos de gestión de memoria y optimización del rendimiento en Redis. Dado que Redis es una base de datos basada en memoria, la configuración de la gestión de memoria es crucial, y a través de esto se puede ajustar el rendimiento y la conservación de datos. En la próxima parte, abordaremos cómo operar un contenedor de Redis usando Docker. Aprendamos a configurar Redis como un contenedor independiente para mantener una conservación de datos eficiente y un buen rendimiento.