Vaciar la Caché de Redis

Administración de Caché en Redis

1. Limpieza de la Caché

Para gestionar la caché de Redis en un entorno Linux:

  1. Navegue al directorio de instalación de Redis: cd /usr/local/redis-2.8.19
  2. Conéctese a la instancia de Redis: redis-cli -h 127.0.0.1 -p 6379
  3. Para mostrar todas las llaves almacenadas, ejecute: KEYS *
  4. Para eliminar una llave específica, utilice: DEL nombre_de_la_llave
  5. Para vaciar completamente todos los datos del servidor Redis, use: FLUSHALL
  6. 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:

  1. En el archivo de configuración (redis.conf), modifique la directiva bind. Coméntela con un # o cámbiela a bind 0.0.0.0 para escuchar en todas las interfaces de red.
  2. En versiones de Redis posteriores a 3.3.2, desactive el modo protegido estableciendo protected-mode no.
  3. Guarde los cambios y reinicie el servicio de Redis.

4. Establecimiento de Contraseña

  1. Edite el archivo de configuración principal: vi /etc/redis.conf
  2. 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

Etiquetas: Redis java Spring Data Redis linux bash scripting

Publicado el 6-19 21:30