Redis como cache para acelerar aplicaciones web
Dedicados & VPS
21

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:

  1. Plugins → Añadir nuevo → buscar "Redis Object Cache".
  2. Instalar y activar.
  3. 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 bind en 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.