- Preparación del Entorno y Compilación
Para compilar Redis desde su código fuente, es necesario contar con las herramientas de desarrollo adecuadas. En distribuciones basadas en RHEL/CentOS, ejecutaremos los siguientes comandos para instalar las dependencias y habilitar un compilador GCC moderno.
# Instalación de herramientas base y compiladores
sudo yum -y install gcc gcc-c++ make cmake wget
sudo yum -y install centos-release-scl devtoolset-9-gcc devtoolset-9-gcc-c++
# Activación del entorno de compilación con GCC 9
scl enable devtoolset-9 bash
gcc --version
A continuación, descargaremos, extraeremos y compilaremos la versión 6.2.10 de Redis, especificando un directorio de instalación personalizado.
REDIS_VER="6.2.10"
TARGET_DIR="/opt/redis-stack"
wget http://download.redis.io/releases/redis-${REDIS_VER}.tar.gz
tar -xzf redis-${REDIS_VER}.tar.gz
cd redis-${REDIS_VER}
# Compilación e instalación
make -j$(nproc)
make install PREFIX=${TARGET_DIR}
- Configuración del Servidor
Una vez compilado, copiaremos el archivo de configuración por defecto a una ubicación estándar como /etc/ y aplicaremos los ajustes necesarios para la operación en red y la seguridad.
cp redis.conf /etc/redis-server.conf
# Modificaciones clave mediante sed
sed -i 's/^bind 127.0.0.1.*/bind 0.0.0.0/' /etc/redis-server.conf
sed -i 's/^daemonize no/daemonize yes/' /etc/redis-server.conf
sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis-server.conf
# Configuración de seguridad y políticas
sed -i '/^# requirepass/a requirepass MyStr0ngR3disP@ss!' /etc/redis-server.conf
sed -i '/^# maxmemory-policy/a maxmemory-policy allkeys-lru' /etc/redis-server.conf
Nota sobre el modo protegido: Si protected-mode se establece en yes, Redis solo aceptará conexiones locales a menos que se configure un bind específico o se defina una contraseña mediante requirepass. Para entornos de producción, se recomienda mantener el modo protegido activo y asegurar el acceso mediante credenciales o reglas de firewall.
- Variables de Entorno y Enlaces Simbólicos
Para facilitar la ejecución de los binarios desde cualquier ruta, crearemos enlaces simbólicos en el directorio de ejecución del sistema.
ln -sf /opt/redis-stack/bin/redis-server /usr/local/bin/redis-server
ln -sf /opt/redis-stack/bin/redis-cli /usr/local/bin/redis-cli
# Verificación
redis-server --version
redis-cli --version
- Integración con Systemd
Para gestionar Redis como un servicio del sistema, crearemos un archivo de unidad de systemd optimizado.
cat <<EOF | sudo tee /etc/systemd/system/redis.service
[Unit]
Description=Advanced key-value store (Redis)
Requires=network.target
After=network-online.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis-server.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
# Recarga de systemd y habilitación del servicio
sudo systemctl daemon-reload
sudo systemctl enable --now redis
sudo systemctl status redis
- Interacción con el Servidor y Autenticación
Al haber configurado una contraseña, cualquier interacción a través de la CLI requerirá autenticación previa. Redis 6 introdujo mejoras en el sistema ACL, pero la autenticación básica sigue el formato estándar.
redis-cli
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH default MyStr0ngR3disP@ss!
OK
127.0.0.1:6379> ping
PONG
- Gestión de Memoria y Políticas de Evicción
Redis permite configurar cómo manejar la memoria cuando se alcanza el límite máximo. Las políticas de evicción determinan qué claves eliminar. A continuación, se detallan las opciones disponibles:
noeviction: Devuelve un error en operaciones de escritura cuando se alcanza el límite de memoria. Las lecturas y eliminaciones siguen funcionando.allkeys-lru: Elimina las claves accedidas menos recientemente entre todas las claves.allkeys-lfu: Elimina las claves accedidas con menor frecuencia entre todas las claves.allkeys-random: Elimina claves al azar.volatile-lru: Similar a allkeys-lru, pero solo aplica a claves que tienen un tiempo de expriación (TTL) configurado.volatile-lfu: Similar a allkeys-lfu, pero solo para claves con TTL.volatile-ttl: Elimina las claves con el tiempo de vida (TTL) restante más corto.volatile-random: Elimina claves al azar, pero solo entre aquellas con TTL configurado.
Para consultar o modificar la política de evicción en tiempo de ejecución:
# Consultar política actual
redis-cli CONFIG GET maxmemory-policy
# Modificar política en caliente
redis-cli CONFIG SET maxmemory-policy volatile-lru
Para detener el servicio de manera controlada, se puede utilizar el cliente CLI o el gestor de servicios:
# Método 1: Vía CLI
redis-cli -a MyStr0ngR3disP@ss! shutdown
# Método 2: Vía Systemd
sudo systemctl stop redis