¿Qué es Redis?
Redis es un almacén de datos en memoria utilizado habitualmente para caché, acceso rápido a los datos y coordinación entre componentes de una aplicación. Admite estructuras como cadenas, hashes, listas, conjuntos y conjuntos ordenados, por lo que sirve para mucho más que simples búsquedas de clave y valor.
Redis puede configurarse con opciones de persistencia y replicación, pero su comportamiento depende de la configuración y de la implementación elegidas. No debe considerarse automáticamente un sustituto de cualquier base de datos principal.
¿Cómo funciona la caché con Redis?
Un patrón habitual consiste en consultar Redis antes de acceder a la base de datos principal. Si el valor solicitado está presente y sigue siendo válido, la aplicación devuelve el resultado almacenado en caché. Si el valor no existe o ha caducado, la aplicación obtiene los datos de la fuente principal y puede guardarlos en Redis para futuras solicitudes.
- La aplicación recibe una solicitud.
- Comprueba si los datos necesarios están disponibles en la caché.
- Si hay datos válidos en la caché, devuelve el resultado.
- Si se produce un fallo de caché, consulta la fuente de datos principal.
- La aplicación puede guardar el resultado en Redis con un tiempo de expiración adecuado.
Este patrón puede reducir las consultas repetidas a la base de datos y mejorar los tiempos de respuesta, especialmente cuando los datos se solicitan con frecuencia. El beneficio depende de la tasa de aciertos, la latencia de red, el tamaño de los datos y la carga de trabajo.
Estructuras de datos de Redis
- String: Almacena texto, números, valores serializados y contadores sencillos.
- Hash: Almacena campos y valores asociados a un registro similar a un objeto.
- List: Mantiene una secuencia ordenada de elementos y puede utilizarse para patrones similares a colas.
- Set: Almacena miembros únicos y admite operaciones de conjuntos.
- Sorted set: Asocia puntuaciones a los miembros y resulta útil para clasificaciones y consultas ordenadas.
Redis también proporciona otros tipos de datos y comandos. Elige la estructura que corresponda al patrón de acceso en lugar de utilizar una única estructura para todos los requisitos.
Casos de uso habituales de Redis
- Caché de aplicaciones: Almacenar resultados consultados con frecuencia para reducir la carga de las bases de datos principales.
- Almacenamiento de sesiones: Mantener disponibles los datos de sesión para distintas instancias de una aplicación.
- Limitación de solicitudes: Contabilizar peticiones dentro de un intervalo para ayudar a aplicar límites de uso.
- Contadores: Mantener contadores que cambian rápidamente mediante operaciones atómicas.
- Clasificaciones: Utilizar conjuntos ordenados para ordenar miembros por puntuación.
- Colas y coordinación: Admitir determinados patrones de procesamiento de tareas o coordinación cuando el diseño encaje con las capacidades de Redis.
Buenas prácticas para diseñar una caché
1. Configura tiempos de expiración adecuados
Utiliza valores de tiempo de vida (TTL) cuando los datos almacenados deban caducar automáticamente. Elige el TTL según la frecuencia con la que cambian los datos de origen y el nivel de antigüedad que puede tolerar la aplicación.
2. Prepara la gestión de fallos de caché
No se garantiza que la caché contenga todos los valores solicitados. La aplicación necesita una alternativa fiable y debe gestionar los fallos repetidos sin sobrecargar la base de datos principal.
3. Utiliza nombres de clave coherentes
Define una convención de nombres predecible que identifique el tipo de dato y el objeto o ámbito correspondiente. Una nomenclatura uniforme facilita la depuración, la supervisión y la invalidación de claves.
4. Evita el crecimiento descontrolado de memoria
Supervisa el consumo de memoria, el número de claves, el comportamiento de expulsión y los valores de gran tamaño. Selecciona una política de memoria adecuada y evita almacenar en caché datos que aporten poco beneficio de rendimiento.
5. Gestiona la coherencia de los datos
Cuando cambien los datos principales, determina cómo actualizar o invalidar las entradas relacionadas de la caché. Una caché puede devolver información obsoleta si las estrategias de invalidación y expiración no están bien diseñadas.
Seguridad y operaciones
- Restringe el acceso de red y evita exponer Redis directamente a redes no confiables.
- Configura la autenticación y los controles de acceso adecuados para la implementación.
- Utiliza cifrado cuando el entorno lo admita y lo requiera.
- Supervisa la latencia, la memoria, las conexiones, la tasa de aciertos y las expulsiones.
- Planifica las copias de seguridad y la persistencia según la importancia de los datos y los requisitos de recuperación.
- Prueba los procedimientos de conmutación por error, actualización y recuperación antes de depender de ellos en producción.
¿Redis sustituye a una base de datos relacional?
No necesariamente. Redis suele utilizarse junto con una base de datos relacional: la base de datos principal almacena registros duraderos de la aplicación, mientras Redis gestiona determinadas cargas de trabajo rápidas o temporales. Que Redis pueda actuar como almacén principal depende de los requisitos de durabilidad, consulta, coherencia y recuperación de la aplicación.
Resumen
Redis es un almacén de datos en memoria versátil para caché, contadores, sesiones, clasificaciones y otros usos de baja latencia. Para utilizarlo eficazmente, es necesario planificar las estructuras de datos, el TTL, la coherencia, los límites de memoria, la supervisión y la seguridad.