Hosting Equipo Avantys 6 min

Redis en VPS: Caché y Sesiones para Alto Rendimiento

Configura Redis en tu VPS para caché de objetos y sesiones. Instalación, configuración con WordPress, Laravel, PHP y monitorización.

// Compartir

Redis en VPS: Caché y Sesiones para Alto Rendimiento
Redis en VPS - caché y sesiones

Cada consulta a la base de datos tarda milisegundos. Multiplica eso por miles de visitas y tienes un sitio lento. Redis almacena datos en memoria RAM, respondiendo en microsegundos.

Esta guía te enseña a usar Redis para acelerar tu VPS dramáticamente.

¿Qué es Redis?

Redis es una base de datos en memoria, ultrarrápida. Se usa principalmente para:

  • Object cache: Cachear consultas de base de datos
  • Sesiones: Almacenar sesiones de usuarios
  • Colas: Procesar tareas en background
  • Cache de páginas: Almacenar HTML generado

Redis vs Sin Redis

Sin RedisCon Redis
Query BD: 10-100msQuery caché: 0.1ms
BD sobrecargadaBD descansada
Escalado difícilEscalado fácil
Sesiones en discoSesiones ultrarrápidas

Instalación

Ubuntu/Debian

# Instalar Redis
sudo apt update
sudo apt install redis-server -y

# Verificar
redis-cli ping
# Respuesta: PONG

systemctl status redis-server

Configuración básica

sudo nano /etc/redis/redis.conf
# Escuchar solo en localhost (seguridad)
bind 127.0.0.1

# Puerto
port 6379

# Contraseña (recomendado)
requirepass tu_contraseña_segura

# Memoria máxima
maxmemory 256mb

# Política cuando se llena la memoria
maxmemory-policy allkeys-lru

# Persistencia (opcional, desactivar para solo caché)
save ""
# O mantener para persistencia:
# save 900 1
# save 300 10

# Logs
logfile /var/log/redis/redis-server.log
loglevel notice
# Reiniciar para aplicar
sudo systemctl restart redis-server

Comandos básicos de Redis

Conectar

# Sin contraseña
redis-cli

# Con contraseña
redis-cli -a tu_contraseña
# O dentro de redis-cli:
AUTH tu_contraseña

Operaciones básicas

# Guardar valor
SET clave "valor"

# Obtener valor
GET clave

# Con expiración (60 segundos)
SETEX clave 60 "valor"

# Verificar si existe
EXISTS clave

# Eliminar
DEL clave

# Ver todas las claves
KEYS *

# Ver claves con patrón
KEYS user:*

# Limpiar toda la BD
FLUSHDB

# Limpiar todas las BDs
FLUSHALL

Información del servidor

# Info general
INFO

# Memoria usada
INFO memory

# Estadísticas
INFO stats

# Clientes conectados
INFO clients

# Monitor en tiempo real
MONITOR

Redis con WordPress

Casos de uso de Redis en VPS

Instalar extensión PHP

sudo apt install php8.2-redis -y
sudo systemctl restart php8.2-fpm

Plugin Redis Object Cache

# Instalar con WP-CLI
wp plugin install redis-cache --activate --path=/var/www/wordpress

# Habilitar
wp redis enable --path=/var/www/wordpress

Configurar wp-config.php

// Antes de "That's all, stop editing!"

// Redis
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'tu_contraseña_segura');
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PREFIX', 'wp_');

// Opcional: timeout
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);

Verificar funcionamiento

# En WordPress admin: Ajustes → Redis

# O con WP-CLI
wp redis status --path=/var/www/wordpress

# Ver claves de WordPress en Redis
redis-cli -a tu_contraseña KEYS "wp_*"

Redis con PHP (Sesiones)

Configurar sesiones en Redis

sudo nano /etc/php/8.2/fpm/php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=tu_contraseña"
sudo systemctl restart php8.2-fpm

Verificar

<?php
// test-session.php
session_start();
$_SESSION['test'] = 'Redis funciona!';
echo $_SESSION['test'];
# Ver sesiones en Redis
redis-cli -a tu_contraseña KEYS "PHPREDIS_SESSION:*"

Redis con Laravel

Instalar predis

composer require predis/predis

Configurar .env

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=tu_contraseña_segura
REDIS_PORT=6379

config/database.php

'redis' => [
    'client' => env('REDIS_CLIENT', 'predis'),
    
    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],
    
    'cache' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_CACHE_DB', 1),
    ],
],

Usar caché en Laravel

// Guardar en caché
Cache::put('key', 'value', 600); // 600 segundos

// Obtener
$value = Cache::get('key');

// Obtener o crear
$value = Cache::remember('users', 600, function () {
    return DB::table('users')->get();
});

// Eliminar
Cache::forget('key');

// Limpiar todo
Cache::flush();

Múltiples bases de datos Redis

Cómo funciona Redis

Redis tiene 16 bases de datos (0-15). Útil para separar datos:

// WordPress en DB 0
define('WP_REDIS_DATABASE', 0);

// Sesiones PHP en DB 1
session.save_path = "tcp://127.0.0.1:6379?auth=pass&database=1"

// Laravel cache en DB 2
REDIS_CACHE_DB=2
# Seleccionar BD en redis-cli
SELECT 1
KEYS *

Optimización de memoria

Ver uso de memoria

redis-cli -a tu_contraseña INFO memory

# Campos importantes:
# used_memory_human: Memoria usada
# maxmemory_human: Límite configurado
# mem_fragmentation_ratio: Fragmentación (ideal ~1.0)

Políticas de evicción

# En redis.conf
maxmemory 256mb
maxmemory-policy allkeys-lru
PolíticaComportamiento
noevictionError si se llena
allkeys-lruElimina menos usadas (recomendado)
volatile-lruSolo claves con TTL
allkeys-randomElimina aleatorio

Configuración según RAM del VPS

RAM VPSmaxmemory Redis
1GB64-128mb
2GB128-256mb
4GB256-512mb
8GB512mb-1gb

Persistencia (opcional)

RDB Snapshots

# Cada 900s si hay 1 cambio
save 900 1
# Cada 300s si hay 10 cambios
save 300 10
# Cada 60s si hay 10000 cambios
save 60 10000

dbfilename dump.rdb
dir /var/lib/redis

AOF (Append Only File)

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

Solo caché (sin persistencia)

save ""
appendonly no

Monitorización

Comandos útiles

# Estadísticas en tiempo real
redis-cli -a tu_contraseña INFO stats

# Métricas importantes
redis-cli -a tu_contraseña INFO | grep -E "used_memory|connected_clients|keyspace_hits|keyspace_misses"

# Hit rate
# hit_rate = keyspace_hits / (keyspace_hits + keyspace_misses)
# Objetivo: > 90%

Script de monitorización

#!/bin/bash
# /root/scripts/redis-status.sh

PASS="tu_contraseña"

echo "=== Redis Status ==="
echo ""

echo "=== Memoria ==="
redis-cli -a $PASS INFO memory | grep -E "used_memory_human|maxmemory_human"

echo ""
echo "=== Clientes ==="
redis-cli -a $PASS INFO clients | grep connected_clients

echo ""
echo "=== Hit Rate ==="
HITS=$(redis-cli -a $PASS INFO stats | grep keyspace_hits | cut -d: -f2 | tr -d '\r')
MISSES=$(redis-cli -a $PASS INFO stats | grep keyspace_misses | cut -d: -f2 | tr -d '\r')
if [ $((HITS + MISSES)) -gt 0 ]; then
    RATE=$(echo "scale=2; $HITS * 100 / ($HITS + $MISSES)" | bc)
    echo "Hit rate: ${RATE}%"
fi

echo ""
echo "=== Claves por BD ==="
redis-cli -a $PASS INFO keyspace

Seguridad

Configuración segura

# Solo localhost
bind 127.0.0.1

# Contraseña fuerte
requirepass contraseña_muy_larga_y_compleja

# Deshabilitar comandos peligrosos
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command DEBUG ""
rename-command CONFIG ""

Si necesitas acceso remoto

# Permitir IP específica
bind 127.0.0.1 10.0.0.5

# Firewall
sudo ufw allow from 10.0.0.5 to any port 6379

Problemas comunes

”NOAUTH Authentication required"

# Falta autenticación
redis-cli -a tu_contraseña PING

# O en PHP/WordPress, verificar password en config

"OOM command not allowed”

# Memoria llena
redis-cli -a tu_contraseña INFO memory

# Aumentar maxmemory o cambiar política
maxmemory 512mb
maxmemory-policy allkeys-lru

Hit rate bajo

# Verificar TTL de claves
redis-cli -a tu_contraseña TTL clave

# Si TTL muy bajo, aumentar tiempo de caché
# En WordPress: WP_REDIS_TIMEOUT

Redis no arranca

# Ver logs
sudo tail -50 /var/log/redis/redis-server.log

# Verificar configuración
redis-server --test-memory 256

# Permisos
sudo chown redis:redis /var/lib/redis

Preguntas frecuentes

¿Cuánta memoria debo asignar a Redis?

Para caché de WordPress, 64-256MB suele ser suficiente. Regla general: 10-20% de la RAM disponible. Monitoriza el uso real y ajusta.

¿Redis reemplaza a MySQL?

No, complementa. Redis cachea resultados de MySQL para no repetir queries. MySQL sigue siendo la fuente de verdad de los datos.

¿Necesito persistencia en Redis?

Para caché puro, no. Si Redis se reinicia, la caché se reconstruye. Para sesiones o datos importantes, sí considera persistencia.

¿Qué hit rate es bueno?

Más del 90% es excelente. Entre 70-90% es aceptable. Menos del 70% indica que la caché no está siendo efectiva o el TTL es muy bajo.

¿Redis o Memcached?

Redis es más versátil (soporta estructuras de datos, persistencia, pub/sub). Memcached es más simple y ligeramente más rápido para caché puro. Para la mayoría de casos, Redis es mejor opción.

Nuestra recomendación

Configuración básica:

  1. Instalar Redis con contraseña
  2. maxmemory según RAM disponible
  3. Plugin Redis Object Cache en WordPress
  4. Sesiones PHP en Redis

Para alto rendimiento:

  • Separar BDs (cache, sesiones, colas)
  • Monitorizar hit rate
  • Sin persistencia para caché puro
  • Ajustar TTL según el tipo de datos

¿Necesitas Redis gestionado? El hosting WordPress de Avantys incluye Redis preconfigurado para máximo rendimiento.


Conclusión

Redis es probablemente la mejora de rendimiento más impactante que puedes hacer en tu VPS. Con una configuración de 15 minutos, tu sitio responderá mucho más rápido y tu base de datos descansará.

Empieza con caché de objetos en WordPress y añade sesiones después.

¿Necesitas un VPS con Redis? Explora los VPS de Avantys con Redis preinstalado y optimizado.


¿Quieres que lo hagamos por ti?

En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.

Hablar con Avantys
// Boletín

Suscríbete al boletín

Guías nuevas, sin spam. Cancela cuando quieras.