Administración de Caché en Redis
1. Limpieza de la Caché
Para gestionar la caché de Redis en un entorno Linux:
- Navegue al directorio de instalación de Redis:
cd /usr/local/redis-2.8.19 - Conéctese a la instancia de Redis:
redis-cli -h 127.0.0.1 -p 6379 - Para mostrar todas las llaves almacenadas, ejecute:
KEYS * - Para eliminar una llave específica, utilice:
DEL nombre_de_la_llave - Para vaciar completamente todos los datos del servidor Redis, use:
FLUSHALL - Para eliminar únicamente las llaves de la base de datos actual, ejecute:
FLUSHDB
2. Inicio del Servicio Redis
Existen dos métodos comunes para iniciar el srevidor:
- Inicio directo: Ejecute el siguiente comando desde el directoroi raíz de Redis. El carácter
&permite que el proceso se ejecute en segundo plano. ``` nohup redis-server & - Usando un archivo de configuración: Especifique la ruta al archivo de configuración deseado. ```
./redis-server /etc/redis/6379.conf
3. Configuración de Acceso Remoto
Para permitir conexiones desde otros equipos:
- En el archivo de configuración (
redis.conf), modifique la directivabind. Coméntela con un#o cámbiela abind 0.0.0.0para escuchar en todas las interfaces de red. - En versiones de Redis posteriores a 3.3.2, desactive el modo protegido estableciendo
protected-mode no. - Guarde los cambios y reinicie el servicio de Redis.
4. Establecimiento de Contraseña
- Edite el archivo de configuración principal:
vi /etc/redis.conf - Descomente o agregue la línea con la contraseña deseada:
requirepass su_contraseña_segura
5. Apertura de Puerto en el Firewall de Linux
Comandos útiles para gestionar el firewall (firewalld):
# Verificar el estado del firewall
firewall-cmd --state
# Iniciar el servicio del firewall
systemctl restart firewalld.service
# Abrir el puerto 6379 de forma permanente
firewall-cmd --zone=public --add-port=6379/tcp --permanent
# Cerrar el puerto 6379 de forma permanente
firewall-cmd --zone=public --remove-port=6379/tcp --permanent
# Recargar la configuración del firewall para aplicar cambios
firewall-cmd --reload
# Listar los puertos actualmente abiertos
firewall-cmd --list-ports
6. Clase de Utilidades para Redis en Java
A continuación se muestra una clase de utilidad para interactuar con Redis usando Spring Data Redis. La lógica se ha reestructurado.
package com.demo.utils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
public final class AsistenteRedis {
private final RedisTemplate<String, Object> plantillaRedis;
public AsistenteRedis(RedisTemplate<String, Object> plantillaRedis) {
this.plantillaRedis = plantillaRedis;
}
public boolean configurarExpiracion(String clave, long segundos) {
if (segundos > 0) {
return Boolean.TRUE.equals(plantillaRedis.expire(clave, segundos, TimeUnit.SECONDS));
}
return false;
}
public long obtenerTiempoExpiracion(String clave) {
Long ttl = plantillaRedis.getExpire(clave, TimeUnit.SECONDS);
return (ttl != null) ? ttl : -2L;
}
public boolean existeClave(String clave) {
return Boolean.TRUE.equals(plantillaRedis.hasKey(clave));
}
public void eliminarClaves(String... claves) {
if (claves != null && claves.length > 0) {
if (claves.length == 1) {
plantillaRedis.delete(claves[0]);
} else {
plantillaRedis.delete((Collection<String>) CollectionUtils.arrayToList(claves));
}
}
}
// --- Operaciones con Cadenas (String) ---
public Object obtener(String clave) {
return (clave != null) ? plantillaRedis.opsForValue().get(clave) : null;
}
public boolean almacenar(String clave, Object valor) {
plantillaRedis.opsForValue().set(clave, valor);
return true;
}
public boolean almacenarConExpiracion(String clave, Object valor, long segundos) {
if (segundos > 0) {
plantillaRedis.opsForValue().set(clave, valor, segundos, TimeUnit.SECONDS);
} else {
almacenar(clave, valor);
}
return true;
}
public long incrementar(String clave, long cantidad) {
if (cantidad <= 0) throw new IllegalArgumentException("El factor de incremento debe ser positivo");
return plantillaRedis.opsForValue().increment(clave, cantidad);
}
public long decrementar(String clave, long cantidad) {
if (cantidad <= 0) throw new IllegalArgumentException("El factor de decremento debe ser positivo");
return plantillaRedis.opsForValue().increment(clave, -cantidad);
}
// --- Operaciones con Hash ---
public Object obtenerDeHash(String claveHash, String campo) {
return plantillaRedis.opsForHash().get(claveHash, campo);
}
public Map<Object, Object> obtenerTodoHash(String claveHash) {
return plantillaRedis.opsForHash().entries(claveHash);
}
public boolean guardarEnHash(String claveHash, Map<String, Object> mapa) {
plantillaRedis.opsForHash().putAll(claveHash, mapa);
return true;
}
public boolean guardarEnHashConExpiracion(String claveHash, Map<String, Object> mapa, long segundos) {
guardarEnHash(claveHash, mapa);
if (segundos > 0) configurarExpiracion(claveHash, segundos);
return true;
}
// ... (Más métodos para Hash, Set y List con lógica similar reestructurada)
}
7. Scripts de Instalación para Linux
7.1) Script de Isntalación Automática
Ejecute el script proporcionando el número de versión como argumento. El script intentará abrir el puerto 6379 en el firewall.
#!/usr/bin/bash
# Instalación automatizada de Redis desde código fuente.
# Uso: sh instalar_redis.sh 5.0.9
VERSION=$1
# ... (Lógica de descarga, compilación y configuración del script)
# Se establecen parámetros del kernel y se configura el entorno.
# El servicio se inicia al finalizar.
7.2) Script de Inicio Rápido
#!/bin/bash
echo "Iniciando el servidor Redis..."
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
echo "Abriendo puerto 6379 en el firewall..."
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
7.3) Script de Detención
#!/bin/bash
echo "Deteniendo el servidor Redis..."
/usr/local/redis/bin/redis-cli -a "su_contraseña" shutdown
8. Solución a Errores de Permisos
Si encuentra errores de tipo permission denied, puede solucionarlos ajustando los permisos con el comando chmod. Por ejemplo:
# Asignar permisos completos (lectura, escritura, ejecución) para el propietario, y lectura/ejecución para el grupo y otros.
sudo chmod -R 755 /ruta/a/redis
# Para un directorio de trabajo específico, otorgar permisos completos solo al propietario.
sudo chmod -R 700 /ruta/a/datos