Instalación y configuración de instancia única
Para obtener el código fuente, utiliza curl en lugar de wget para descargar y extraer el paquete:
curl -O https://download.redis.io/releases/redis-7.0.5.tar.gz
tar -xvzf redis-7.0.5.tar.gz
cd redis-7.0.5
make
sudo make install PREFIX=/usr/local/redis
Configura el servicio para que se ejecute en segundo plano editando el archivo de configuración:
daemonize yes
dir /var/lib/redis-data
bind 0.0.0.0
requirepass ClaveSegura#99
port 6390
pidfile /var/run/redis_6390.pid
maxclients 500
timeout 120
Ajusta los permisos del directorio de trabajo e inicia el servidor:
sudo chown -R redis:redis /var/lib/redis-data
redis-server /etc/redis/redis.conf
Accede a la consola de Redis:
redis-cli -p 6390 -a ClaveSegura#99
Gestión de parámetros en redis.conf
Puedes consultar y modificar configuraciones en tiempo de ejecución:
CONFIG GET *
CONFIG GET maxmemory
CONFIG SET loglevel "warning"
Algunos parámetros importantes incluyen:
- port: Puerto de escucha (por defecto 6379).
- bind: Restringe el acceso por IP.
- timeout: Cierra conexiones inactivas tras un tiempo.
- dbfilename: Define el nombre del archivo de respaldo.
- appandonly: Activa el registro persistente AOF.
- maxmemory: Limita la RAM utilizada por Redis.
Estructuras de datos en Redis
Strings
KEYS *
KEYS usuario:*
SET usuario:nombre "Carlos" EX 1200
GET usuario:nombre
EXPIRE usuario:nombre 600
TTL usuario:nombre
FLUSHDB
FLUSHALL
Hashes
Almacena objetos con múltiples campos:
HSET perfil nombre "Carlos" edad 30 rol "admin"
TYPE perfil
HGET perfil nombre
HGETALL perfil
Lists
Gestión de colas:
LPUSH lista:tareas "Tarea1" "Tarea2" "Tarea3"
LRANGE lista:tareas 0 -1
LLEN lista:tareas
LPOP lista:tareas
RPOP lista:tareas
Sets
Colecciones no ordenadas de elementos únicos:
SADD set:tags "php" "redis" "mysql"
SMEMBERS set:tags
SRANDMEMBER set:tags 1
SPOP set:tags 1
Sorted Sets (ZSET)
Listas ordenadas por puntuación:
ZADD ranking:ganadores 100 "Ana" 250 "Beto" 300 "Carlos"
ZRANGE ranking:ganadores 0 -1 WITHSCORES
Geospatiales
Manejo de coordenadas y distancias:
GEOADD ciudades:mundo -66.90 10.50 "Caracas" -46.63 -23.55 "SaoPaulo" -99.13 19.43 "CDMX"
GEODIST ciudades:mundo Caracas CDMX km
Mecanismos de persistencia
RDB (Redis Database)
Genera snapshots completos de los datos en intervalos definidos. Es eficiente para backups pero puede perder datos recientes si ocurre un fallo.
save 900 1
save 300 5
save 60 2000
dir /var/lib/redis-data
dbfilename respaldo.rdb
stop-writes-on-bgsave-error yes
rdbcompression yes
AOF (Append Only File)
Registra cada operación de escritura, ofreciendo mayor durabilidad. El archivo puede crecer, pero Redis lo reescribe automáticamente.
appendonly yes
appendfilename "registro.aof"
appendfsync everysec
auto-aof-rewrite-percentage 80
auto-aof-rewrite-min-size 32mb
Si ambos métodos están activos, Redis prioriza AOF al restaurar.
Arquitectura Maestro-Esclavo
Copia la configuración del nodo principal para el nuevo nodo secundario (puerto 6391):
sudo cp -rf /var/lib/redis-data /var/lib/redis-data-6391
Ajusta el archivo redis.conf para el esclavo:
port 6391
replicaof 127.0.0.1 6390
masterauth ClaveSegura#99
Verifica el estado de la replicación:
INFO replication
Configuración de Sentinel
Para alta disponibilidad y conmutación por error automática:
protected-mode no
port 26390
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile "/var/log/redis/sentinel.log"
dir /var/lib/redis-sentinel
sentinel monitor mymaster 127.0.0.1 6390 1
sentinel auth-pass mymaster ClaveSegura#99
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
Inicia el servicio Sentinel y verifica su estado:
redis-sentinel /etc/redis/sentinel.conf
redis-cli -p 26390
SENTINEL master mymaster
SENTINEL slaves mymaster
Integración con PHP
Instala el entorno de desarrollo y la extensión phpredis:
sudo apt-get install php8.1-dev
git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure
make
sudo make install
Ejemplo de conexión y uso básico (test_redis.php):
<?php
$r = new Redis();
$r->connect('127.0.0.1', 6390);
$r->auth('ClaveSegura#99');
$r->set('mensaje', 'Hola Mundo desde PHP');
echo $r->get('mensaje') . PHP_EOL;
?>
Ejecuta el script desde la terminal:
php test_redis.php