In-Memory Processing en Redis permite almacenar y procesar datos directamente en memoria RAM, logrando una velocidad excepcional para operaciones como lectura, escritura, y ejecución de cálculos en tiempo real. Redis, como base de datos en memoria, es ideal para casos de uso que requieren alta disponibilidad y baja latencia.
El In-Memory Processing se refiere al uso de la memoria principal (RAM) para almacenar y procesar datos, evitando la latencia asociada con el acceso al disco. Redis aprovecha esta arquitectura para manejar estructuras de datos rápidas y optimizadas, como cadenas, hashes, listas y conjuntos ordenados.
1. Velocidad: Operaciones extremadamente rápidas gracias al acceso directo a la memoria.
2. Persistencia opcional: Aunque se centra en la memoria, Redis permite persistir datos en disco para recuperación.
3. Soporte para estructuras de datos avanzadas: Incluye listas, conjuntos, hashes, etc., ideales para aplicaciones complejas.
1. Almacenamiento en caché: Almacena datos temporalmente para reducir el tiempo de acceso a sistemas backend o bases de datos.
2. Colas de mensajes: Implementa sistemas de mensajería con listas o streams de Redis.
3. Gestión de sesiones: Almacena sesiones de usuario para aplicaciones web.
4. Contadores y métricas en tiempo real: Realiza cálculos rápidos para sistemas analíticos o rastreo.
5. Clasificaciones y búsquedas: Utiliza conjuntos ordenados para manejar rankings o sugerencias.
Antes de usar Redis, asegúrate de instalarlo y ejecutarlo.
sudo apt update
sudo apt install redis
redis-cli ping
Redis utiliza comandos sencillos para manipular datos directamente en la memoria.
# Establecer un valor
SET clave "valor"
# Obtener un valor
GET clave
1. Listas:
# Agregar elementos a una lista
LPUSH mi_lista "uno"
LPUSH mi_lista "dos"
# Obtener elementos de la lista
LRANGE mi_lista 0 -1
2. Hashes:
# Almacenar un hash
HSET usuario:1 nombre "Juan" edad "30"
# Obtener un campo del hash
HGET usuario:1 nombre
# Obtener todos los campos
HGETALL usuario:1
3. Conjuntos ordenados:
# Agregar elementos con puntuación
ZADD ranking 100 "usuario1" 200 "usuario2"
# Obtener los elementos en orden
ZRANGE ranking 0 -1 WITHSCORES
Supongamos que tienes una aplicación de juegos y necesitas mantener un ranking de jugadores.
1. Agregar puntuaciones:
ZADD jugadores 500 "Alice"
ZADD jugadores 700 "Bob"
ZADD jugadores 300 "Charlie"
2. Obtener los mejores jugadores:
ZREVRANGE jugadores 0 2 WITHSCORES
3. Incrementar la puntuación de un jugador:
ZINCRBY jugadores 50 "Alice"
Aunque Redis opera principalmente en memoria, permite persistir datos en disco mediante dos métodos principales:
1. Snapshots (RDB): Crea copias de seguridad periódicas del estado en memoria.
redis.conf
:
save 900 1 # Guarda cada 900 segundos si al menos 1 clave cambió.
2. Append-Only File (AOF): Registra cada operación para garantizar la recuperación completa.
redis.conf
:
appendonly yes
1. Expiración de claves:
Configura un tiempo de expiración para liberar memoria automáticamente:
SET session:123 "data" EX 60 # Expira en 60 segundos.
2. Evicción de claves:
Define políticas para manejar memoria llena (redis.conf
):
maxmemory-policy allkeys-lru # Elimina claves menos usadas.
3. Monitoreo:
Usa INFO
y MONITOR
para supervisar el uso de memoria y rendimiento:
redis-cli INFO memory
redis-py
Jedis
ioredis
import redis
# Conexión a Redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
# Almacenar un valor
r.set('clave', 'valor')
# Recuperar el valor
print(r.get('clave'))
1. Ultra rápido: Redis puede procesar millones de operaciones por segundo gracias al almacenamiento en memoria.
2. Simplicidad: Una API directa y comandos intuitivos para gestionar datos.
3. Escalabilidad: Compatible con clústeres y particionamiento de datos.
4. Versatilidad: Soporte para múltiples tipos de datos y casos de uso.
Jorge García
Fullstack developer