Qué es Redis
Redis es un almacén de datos en memoria — guarda valores indexados por claves directamente en RAM, lo que permite lecturas y escrituras en microsegundos. Aunque puede funcionar como base de datos primaria, su uso más común es como capa de cache entre una aplicación y la base de datos principal. La diferencia de velocidad entre consultar Redis y consultar MySQL puede ser de 100x a 1000x para los mismos datos.
Problemas que resuelve
- Consultas repetidas a la base de datos. Muchas aplicaciones ejecutan las mismas queries cientos de veces por hora. Cachear el resultado en Redis evita la carga repetida en MySQL.
- Sesiones de usuario. En vez de guardarlas en disco o MySQL, en Redis son casi instantáneas.
- Rate limiting. Contadores por IP o usuario para limitar peticiones abusivas.
- Colas de tareas. Almacenar trabajos pendientes para que un worker los procese en background.
- Resultados temporales. Cálculos complejos que no quieres repetir.
Instalación en Ubuntu/Debian
sudo apt update sudo apt install redis-server
En CentOS/Rocky
sudo dnf install epel-release sudo dnf install redis sudo systemctl enable --now redis
Configuración básica
El archivo principal es /etc/redis/redis.conf. Los ajustes más relevantes al empezar:
Escuchar solo localmente
bind 127.0.0.1 ::1
Por seguridad, Redis debe escuchar solo en localhost a menos que lo uses explícitamente desde otro servidor. Nunca lo expongas en la IP pública sin contraseña — es una de las fuentes más comunes de servidores comprometidos.
Contraseña (requerepass)
requirepass TuContraseñaMuyLarga
Incluso en localhost, activa una contraseña. Evita que cualquier script local pueda acceder sin autenticación.
Memoria máxima
maxmemory 512mb maxmemory-policy allkeys-lru
Limita cuánta RAM puede usar Redis. Si llega al límite, la política allkeys-lru elimina las claves menos usadas recientemente para hacer espacio a las nuevas. Otras políticas:
- allkeys-lru — elimina las menos usadas recientemente (recomendado para cache puro).
- allkeys-lfu — elimina las menos frecuentes.
- volatile-lru — solo aplica LRU a claves con TTL (expiración).
- noeviction — falla al llenarse. Usar solo si Redis es DB primaria, no cache.
Persistencia (opcional)
Redis puede guardar su estado a disco periódicamente. Si te importa no perder el cache en un reinicio:
save 900 1 save 300 10 save 60 10000
Significa: guardar si hay al menos 1 cambio en 900s, 10 cambios en 300s, o 10000 en 60s. Para cache puro, muchos desactivan la persistencia (save "") porque no les importa perder el cache al reiniciar.
Comandos básicos desde CLI
redis-cli # conectar redis-cli -a TuContraseña # con contraseña
Una vez dentro:
SET nombre "Juan" # guardar valor GET nombre # leer DEL nombre # borrar EXISTS nombre # verificar si existe EXPIRE nombre 60 # auto-borrar en 60 segundos TTL nombre # cuánto tiempo le queda KEYS * # listar todas (no usar en prod con millones) FLUSHDB # borrar todo el DB actual INFO # estadísticas del servidor
Tipos de datos soportados
Además de strings simples, Redis maneja listas, hashes, sets, sorted sets y más. Cada uno tiene comandos específicos:
LPUSH mi_lista "item1" # agregar al inicio RPUSH mi_lista "item2" # agregar al final LRANGE mi_lista 0 -1 # ver todos HSET usuario:1 nombre "Juan" edad 30 HGET usuario:1 nombre SADD colores "rojo" "verde" "azul" SMEMBERS colores ZADD ranking 100 "Juan" 200 "Maria" ZRANGE ranking 0 -1 WITHSCORES
Usar Redis desde PHP
Necesitas la extensión phpredis:
sudo apt install php-redis sudo systemctl restart php8.2-fpm
Y en el código PHP:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('TuContraseña');
// Guardar
$redis->set('producto:42', json_encode($producto));
$redis->expire('producto:42', 3600); // 1 hora
// Leer
$cached = $redis->get('producto:42');
if ($cached) {
$producto = json_decode($cached, true);
} else {
$producto = consultarDB(42);
$redis->setex('producto:42', 3600, json_encode($producto));
}
Redis como cache en WordPress
WordPress soporta caches externos mediante "object cache drop-ins". Instala el plugin Redis Object Cache:
- Plugins → Añadir nuevo → buscar "Redis Object Cache".
- Instalar y activar.
- En Herramientas → Redis, hacer clic en "Enable Object Cache".
Verifica que la extensión phpredis está instalada en tu servidor. A partir de ese momento, WordPress cachea automáticamente opciones, metadatos de posts y consultas recurrentes en Redis — la velocidad se nota especialmente en sitios con muchas queries por página (WooCommerce, multisite).
Monitoreo básico
Ver estadísticas
redis-cli INFO stats redis-cli INFO memory
Ver uso de memoria por clave
redis-cli --bigkeys
Ver comandos más usados
redis-cli INFO commandstats
Problemas frecuentes
"Could not connect to Redis"
- Servicio no corriendo:
sudo systemctl start redis - Puerto cerrado: revisa
binden redis.conf. - Firewall bloqueando: si conectas desde fuera, abre el puerto 6379 solo para IPs autorizadas.
"NOAUTH Authentication required"
Redis tiene contraseña activa y no la pasaste. Usa -a contraseña con redis-cli o auth() en tu cliente.
"OOM command not allowed when used memory > 'maxmemory'"
Redis está lleno y la política no permite eliminar. Cambia a allkeys-lru o aumenta maxmemory.
Latencia alta al guardar grandes cantidades de datos
Redis es single-thread para comandos. Operaciones masivas (KEYS *, SCAN en millones, FLUSHALL) bloquean el servidor brevemente. Usa SCAN en vez de KEYS en producción.
Memcached como alternativa
Memcached es otro sistema de cache en memoria, más antiguo y simple. A diferencia de Redis:
- Solo guarda strings (sin tipos de datos complejos).
- No tiene persistencia.
- Es multi-hilo, puede aprovechar múltiples cores para cargas extremas.
- Configuración más simple.
Para casos de uso básicos (cache de queries simples), Memcached sigue siendo válido. Para casi todo lo demás, Redis es superior por sus estructuras de datos y flexibilidad.