Instalación y Configuración Avanzada de Redis

Para instalar Redis en CentOS 7 usando yum:

# Configurar el repositorio y clave GPG
cat > /etc/yum.repos.d/redis.repo << 'EOF'
[redis-repo]
name=Redis Repository
baseurl=https://packages.redis.io/rpm/rhel7
enabled=1
gpgcheck=1
EOF

curl -fsSL https://packages.redis.io/gpg | sudo rpm --import -
yum install -y redis-stack-server

systemctl enable --now redis-stack-server
redis-cli --version

Para Ubuntu 18, se puede instalar mediante apt:

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

apt update
apt install -y redis-server
redis-cli --version

Compilación desde código fuente en Ubuntu 18:

# Descargar y descomprimir
wget https://download.redis.io/releases/redis-7.2.0.tar.gz
tar -xzf redis-7.2.0.tar.gz -C /usr/local/src/
cd /usr/local/src/redis-7.2.0/

# Instalar dependencias y compilar
apt install -y build-essential libsystemd-dev
make USE_SYSTEMD=yes PREFIX=/opt/redis install

# Configurar enlaces y directorios
ln -s /opt/redis/bin/redis-* /usr/local/bin/
mkdir -p /opt/redis/{config,logs,data,run}
cp redis.conf /opt/redis/config/
cp utils/systemd-redis_server.service /lib/systemd/system/redis.service

# Crear usuario y establecer permisos
groupadd -g 2000 redis
useradd -u 2000 -g 2000 redis -s /sbin/nologin
chown -R redis:redis /opt/redis/

Ajustes importantes del kernel para Redis:

# Aumentar el límite de conexiones simultáneas
echo "net.core.somaxconn = 512" >> /etc/sysctl.conf

# Permitir asignación de memoria completa
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

# Desactivar transparencia de páginas grandes
echo never > /sys/kernel/mm/transparent_hugepage/enabled

sysctl -p

Pruebas de rendimiento con redis-benchmark:

# Ejecución estándar con parámetros definidos
redis-benchmark -h 127.0.0.1 -p 6379 -n 5000 -c 150 -q

# Prueba específica para operaciones SET/GET
redis-benchmark -t set,get -n 2000 -c 100 --csv

# Prueba con valores de gran tamaño
redis-benchmark -t set -d 512 -n 1000 -r 500 -c 200

Estrategias de eliminación de claves:

Configuración mediante el parámetro maxmemory-policy:

  • volatile-lru: Elimina claves con tiempo de expiración usando LRU aproximado
  • allkeys-lfu: Elimina cualquier clave usando LFU aproxmiado
  • noeviction: Retorna error cuando se alcanza el límite de memoria

2. Tipos de datos fundamentales en Redis

Cadenas (Strings):

# Almacenamiento básico
SET usuario:1 "Ana López"
GET usuario:1

# Operaciones con múltiples claves
MSET producto:101 "Laptop" precio:101 "999.99"
MGET producto:101 precio:101

# Manipulación de cadenas
APPEND descripcion:1 " modelo 2024"
STRLEN descripcion:1

# Control de existencia y expiración
EXISTS usuario:1 usuario:2
EXPIRE sesion:abc 3600
TTL sesion:abc
PERSIST sesion:abc

# Operaciones numéricas atómicas
INCR contador:visitas
DECR stock:101
INCRBY saldo:1001 500

Listas (Lists):

# Creación e inserción
LPUSH cola:tareas "tarea3" "tarea2" "tarea1"
RPUSH registro:logs "2024-01-01" "2024-01-02"

# Consultas y modificaciones
LLEN cola:tareas
LRANGE cola:tareas 0 -1
LINDEX cola:tareas 0
LSET registro:logs 1 "2024-01-03"

# Eliminación de elementos
LPOP cola:tareas
RPOP cola:tareas
LTRIM cola:tareas 0 2

Conjuntos (Sets):

# Operaciones básicas
SADD etiquetas:101 "tecnología" "programación"
SADD etiquetas:102 "tecnología" "diseño"

# Consulta de elementos
SMEMBERS etiquetas:101
SCARD etiquetas:101

# Operaciones entre conjuntos
SINTER etiquetas:101 etiquetas:102
SUNION etiquetas:101 etiquetas:102
SDIFF etiquetas:101 etiquetas:102

# Eliminación selectiva
SREM etiquetas:101 "programación"

Conjuntos ordenados (Sorted Sets):

# Creación con puntuación
ZADD ranking:2024 95 "jugador_a" 87 "jugador_b" 92 "jugador_c"

# Consultas ordenadas
ZRANGE ranking:2024 0 -1 WITHSCORES
ZREVRANGE ranking:2024 0 2 WITHSCORES

# Operaciones específicas
ZCARD ranking:2024
ZRANK ranking:2024 "jugador_a"
ZSCORE ranking:2024 "jugador_b"

# Modificaciones
ZREM ranking:2024 "jugador_b"
ZINCRBY ranking:2024 3 "jugador_a"

Hashes:

# Almacenamiento de estructuras
HSET usuario:1001 nombre "Carlos" apellido "García" edad 28
HGETALL usuario:1001

# Operaciones sobre campos
HGET usuario:1001 nombre
HSET usuario:1001 email "carlos@ejemplo.com"
HDEL usuario:1001 edad

# Operaciones por lotes
HMSET producto:2001 nombre "Teclado" precio 59.99 stock 100
HMGET producto:2001 nombre precio
HKEYS producto:2001
HVALS producto:2001

3. Configuración esencial de Redis

Parámetros importantes en redis.conf:

# Conexión y seguridad
bind 0.0.0.0
protected-mode yes
port 6379
requirepass "ContraseñaSegura123!"

# Rendimiento y límites
tcp-backlog 511
timeout 300
tcp-keepalive 60
maxclients 10000
maxmemory 2gb
maxmemory-policy allkeys-lru

# Persistencia RDB
save 3600 1 300 100 60 10000
dbfilename dump.rdb
dir /opt/redis/data/

# Persistencia AOF
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# Logging y monitoreo
loglevel notice
logfile "/opt/redis/logs/redis.log"
slowlog-log-slower-than 10000
slowlog-max-len 128

4. Mecanismos de persistencia

RDB (Redis Database):

Genera instentáneas del conjunto de datos en puntos específicos del tiempo. Utiliza un proceso hijo para la escritura, lo que minimiza el impacto en el rendimiento del proceso principal.

AOF (Append Only File):

Registra cada operación de escritura en un archivo de log. Proporciona mayor durabilidad de datos con estrategias de sincronización configurables (siempre, cada segundo, o bajo demanda del sistema operativo).

5. Control de acceso con ACL

Configuración de usuarios con permisos específicos:

# Crear usuario con permisos limitados
ACL SETUSER lector ON >contraseña123 ~* +get +mget +keys -@write

# Crear usuario administrativo
ACL SETUSER admin ON >adminpass456 ~* +@all

# Guardar configuración ACL
ACL SAVE

# Ejemplo de archivo ACL externo (/opt/redis/users.acl)
user lector on >contraseña123 ~* +get +mget +keys -@write
user admin on >adminpass456 ~* +@all
user default on >defaultpass ~* +@all

6. Migración de datos con redis-dump

Exportar datos de una instancia:

# Instalar herramientas necesarias
apt install ruby ruby-dev
gem install redis-dump

# Exportar datos a formato JSON
redis-dump -u redis://:contraseña@127.0.0.1:6379 > /tmp/datos_redis.json

# Importar datos en otro servidor
cat /tmp/datos_redis.json | redis-load -u redis://:nuevacontraseña@192.168.1.100:6379

Etiquetas: Redis instalación configuracion tipos de datos persistencia

Publicado el 7-17 11:41