Hoja de Trucos de Redis

Aprende Redis con Laboratorios Prácticos

Aprenda las operaciones de estructuras de datos en memoria de Redis a través de laboratorios prácticos y escenarios del mundo real. LabEx ofrece cursos completos de Redis que cubren comandos esenciales, estructuras de datos, estrategias de almacenamiento en caché, mensajería pub/sub y optimización del rendimiento. Domine el almacenamiento en caché de alto rendimiento y el procesamiento de datos en tiempo real.

Instalación y Configuración de Redis

Docker: docker run redis

La forma más rápida de ejecutar Redis localmente.

# Ejecutar Redis en Docker
docker run --name my-redis -p 6379:6379 -d redis
# Conectarse a la CLI de Redis
docker exec -it my-redis redis-cli
# Ejecutar con almacenamiento persistente
docker run --name redis-persistent -p 6379:6379 -v redis-data:/data -d redis

Linux: sudo apt install redis

Instalar el servidor Redis en sistemas Ubuntu/Debian.

# Instalar Redis
sudo apt update
sudo apt install redis-server
# Iniciar el servicio Redis
sudo systemctl start redis-server
# Habilitar el autoarranque al iniciar
sudo systemctl enable redis-server
# Verificar estado
sudo systemctl status redis

Conectar y Probar: redis-cli

Conectarse al servidor Redis y verificar la instalación.

# Conectarse a Redis local
redis-cli
# Probar conexión
redis-cli PING
# Conectarse a Redis remoto
redis-cli -h hostname -p 6379 -a password
# Ejecutar comando único
redis-cli SET mykey "Hello Redis"

Operaciones Básicas de Cadenas (Strings)

Establecer y Obtener: SET / GET

Almacenar valores simples (texto, números, JSON, etc.).

# Establecer un par clave-valor
SET mykey "Hello World"
# Obtener valor por clave
GET mykey
# Establecer con expiración (en segundos)
SET session:123 "user_data" EX 3600
# Establecer solo si la clave no existe
SET mykey "new_value" NX
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué hace SET mykey "value" EX 3600?
Establece la clave con un valor de 3600 bytes
Establece la clave solo si ya existe
Establece la clave con un valor que expira después de 3600 segundos
Establece la clave con 3600 valores diferentes

Manipulación de Cadenas: APPEND / STRLEN

Modificar e inspeccionar valores de cadena.

# Añadir al final de la cadena existente
APPEND mykey " - Welcome!"
# Obtener longitud de la cadena
STRLEN mykey
# Obtener subcadena
GETRANGE mykey 0 4
# Establecer subcadena
SETRANGE mykey 6 "Redis"

Operaciones Numéricas: INCR / DECR

Incrementar o decrementar valores enteros almacenados en Redis.

# Incrementar en 1
INCR counter
# Decrementar en 1
DECR counter
# Incrementar por cantidad específica
INCRBY counter 5
# Incrementar flotante
INCRBYFLOAT price 0.1
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué sucede si usa INCR en una clave que no existe?
Redis crea la clave con valor 1
Redis devuelve un error
Redis crea la clave con valor 0
No sucede nada

Operaciones Múltiples: MSET / MGET

Trabajar con múltiples pares clave-valor de manera eficiente.

# Establecer múltiples claves a la vez
MSET key1 "value1" key2 "value2" key3 "value3"
# Obtener múltiples valores
MGET key1 key2 key3
# Establecer múltiples solo si ninguna existe
MSETNX key1 "val1" key2 "val2"

Operaciones de Lista (List)

Las listas son secuencias ordenadas de cadenas, útiles como colas (queues) o pilas (stacks).

Añadir Elementos: LPUSH / RPUSH

Añadir elementos al lado izquierdo (cabeza) o derecho (cola) de una lista.

# Añadir a la cabeza (izquierda)
LPUSH mylist "first"
# Añadir a la cola (derecha)
RPUSH mylist "last"
# Añadir múltiples elementos
LPUSH mylist "item1" "item2" "item3"

Eliminar Elementos: LPOP / RPOP

Eliminar y devolver elementos de los extremos de la lista.

# Eliminar de la cabeza
LPOP mylist
# Eliminar de la cola
RPOP mylist
# Pop bloqueante (espera por un elemento)
BLPOP mylist 10

Acceder a Elementos: LRANGE / LINDEX

Recuperar elementos o rangos de listas.

# Obtener la lista completa
LRANGE mylist 0 -1
# Obtener los primeros 3 elementos
LRANGE mylist 0 2
# Obtener elemento específico por índice
LINDEX mylist 0
# Obtener longitud de la lista
LLEN mylist
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué devuelve LRANGE mylist 0 -1?
Solo el primer elemento
Todos los elementos de la lista
Solo el último elemento
Un error

Utilidades de Lista: LSET / LTRIM

Modificar el contenido y la estructura de la lista.

# Establecer elemento en un índice
LSET mylist 0 "new_value"
# Recortar lista a un rango
LTRIM mylist 0 99
# Encontrar posición de un elemento
LPOS mylist "search_value"

Operaciones de Conjunto (Set)

Los conjuntos son colecciones de elementos de cadena únicos y no ordenados.

Operaciones Básicas de Conjunto: SADD / SMEMBERS

Añadir elementos únicos a conjuntos y recuperar todos los miembros.

# Añadir elementos al conjunto
SADD myset "apple" "banana" "cherry"
# Obtener todos los miembros del conjunto
SMEMBERS myset
# Verificar si el elemento existe
SISMEMBER myset "apple"
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué sucede si intenta añadir un elemento duplicado a un conjunto de Redis?
Crea un error
Reemplaza el elemento existente
El duplicado es ignorado y el conjunto permanece sin cambios
Crea una lista en su lugar
# Obtener tamaño del conjunto SCARD myset ```

Modificaciones de Conjunto: SREM / SPOP

Eliminar elementos de los conjuntos de diferentes maneras.

# Eliminar elementos específicos
SREM myset "banana"
# Eliminar y devolver un elemento aleatorio
SPOP myset
# Obtener elemento aleatorio sin eliminar
SRANDMEMBER myset

Operaciones de Conjunto: SINTER / SUNION

Realizar operaciones de conjuntos matemáticas.

# Intersección de conjuntos
SINTER set1 set2
# Unión de conjuntos
SUNION set1 set2
# Diferencia de conjuntos
SDIFF set1 set2
# Almacenar resultado en un nuevo conjunto
SINTERSTORE result set1 set2

Utilidades de Conjunto: SMOVE / SSCAN

Manipulación avanzada de conjuntos y escaneo.

# Mover elemento entre conjuntos
SMOVE source_set dest_set "element"
# Escanear conjunto incrementalmente
SSCAN myset 0 MATCH "a*" COUNT 10

Operaciones de Hash

Los hashes almacenan pares campo-valor, como objetos JSON pequeños o diccionarios.

Operaciones Básicas de Hash: HSET / HGET

Establecer y recuperar campos de hash individuales.

# Establecer campo de hash
HSET user:123 name "John Doe" age 30
# Obtener campo de hash
HGET user:123 name
# Establecer múltiples campos
HMSET user:123 email "john@example.com" city "NYC"
# Obtener múltiples campos
HMGET user:123 name age email

Inspección de Hash: HKEYS / HVALS

Examinar la estructura y el contenido del hash.

# Obtener todos los nombres de campo
HKEYS user:123
# Obtener todos los valores
HVALS user:123
# Obtener todos los campos y valores
HGETALL user:123
# Obtener número de campos
HLEN user:123

Utilidades de Hash: HEXISTS / HDEL

Verificar existencia y eliminar campos de hash.

# Verificar si el campo existe
HEXISTS user:123 email
# Eliminar campos
HDEL user:123 age city
# Incrementar campo de hash
HINCRBY user:123 age 1
# Incrementar por flotante
HINCRBYFLOAT user:123 balance 10.50

Escaneo de Hash: HSCAN

Iterar a través de hashes grandes incrementalmente.

# Escanear campos del hash
HSCAN user:123 0
# Escanear con coincidencia de patrón
HSCAN user:123 0 MATCH "addr*" COUNT 10

Operaciones de Conjunto Ordenado (Sorted Set)

Los conjuntos ordenados combinan la unicidad de los conjuntos con el orden basado en puntuaciones (scores).

Operaciones Básicas: ZADD / ZRANGE

Añadir miembros con puntuación y recuperar rangos.

# Añadir miembros con puntuaciones
ZADD leaderboard 100 "player1" 200 "player2"
# Obtener miembros por rango (índice 0-based)
ZRANGE leaderboard 0 -1
# Obtener con puntuaciones
ZRANGE leaderboard 0 -1 WITHSCORES
# Obtener por rango de puntuación
ZRANGEBYSCORE leaderboard 100 200

Información del Conjunto Ordenado: ZCARD / ZSCORE

Obtener información sobre los miembros del conjunto ordenado.

# Obtener tamaño del conjunto
ZCARD leaderboard
# Obtener puntuación del miembro
ZSCORE leaderboard "player1"
# Obtener rango del miembro
ZRANK leaderboard "player1"
# Contar miembros en rango de puntuación
ZCOUNT leaderboard 100 200

Modificaciones: ZREM / ZINCRBY

Eliminar miembros y modificar puntuaciones.

# Eliminar miembros
ZREM leaderboard "player1"
# Incrementar puntuación del miembro
ZINCRBY leaderboard 10 "player2"
# Eliminar por rango
ZREMRANGEBYRANK leaderboard 0 2
# Eliminar por puntuación
ZREMRANGEBYSCORE leaderboard 0 100

Avanzado: ZUNIONSTORE / ZINTERSTORE

Combinar múltiples conjuntos ordenados.

# Unión de conjuntos ordenados
ZUNIONSTORE result 2 set1 set2
# Intersección con pesos
ZINTERSTORE result 2 set1 set2 WEIGHTS 1 2
# Con función de agregación
ZUNIONSTORE result 2 set1 set2 AGGREGATE MAX

Gestión de Claves (Key Management)

Inspección de Claves: KEYS / EXISTS

Encontrar claves usando patrones y verificar existencia.

# Obtener todas las claves (usar con cuidado en producción)
KEYS *
# Claves con patrón
KEYS user:*
# Claves que terminan con patrón
KEYS *:profile
# Comodín de un solo carácter
KEYS order:?
# Verificar si la clave existe
EXISTS mykey

Información de Clave: TYPE / TTL

Obtener metadatos de la clave e información de expiración.

# Obtener tipo de datos de la clave
TYPE mykey
# Obtener tiempo de vida (segundos)
TTL mykey
# Obtener TTL en milisegundos
PTTL mykey
# Eliminar expiración
PERSIST mykey

Operaciones de Clave: RENAME / DEL

Renombrar, eliminar y mover claves.

# Renombrar clave
RENAME oldkey newkey
# Renombrar solo si la nueva clave no existe
RENAMENX oldkey newkey
# Eliminar claves
DEL key1 key2 key3
# Mover clave a base de datos diferente
MOVE mykey 1

Expiración: EXPIRE / EXPIREAT

Establecer tiempos de expiración para las claves.

# Establecer expiración en segundos
EXPIRE mykey 3600
# Establecer expiración en marca de tiempo específica
EXPIREAT mykey 1609459200
# Establecer expiración en milisegundos
PEXPIRE mykey 60000

Gestión de Bases de Datos

Selección de Base de Datos: SELECT / FLUSHDB

Administrar múltiples bases de datos dentro de Redis.

# Seleccionar base de datos (0-15 por defecto)
SELECT 0
# Limpiar base de datos actual
FLUSHDB
# Limpiar todas las bases de datos
FLUSHALL
# Obtener tamaño de la base de datos actual
DBSIZE

Información del Servidor: INFO / PING

Obtener estadísticas del servidor y probar conectividad.

# Probar conexión al servidor
PING
# Obtener información del servidor
INFO
# Obtener sección de información específica
INFO memory
INFO replication
# Obtener tiempo del servidor
TIME

Persistencia: SAVE / BGSAVE

Controlar la persistencia y las copias de seguridad de datos de Redis.

# Guardado síncrono (bloquea el servidor)
SAVE
# Guardado en segundo plano (no bloqueante)
BGSAVE
# Obtener tiempo del último guardado
LASTSAVE
# Reescribir archivo AOF
BGREWRITEAOF

Configuración: CONFIG GET / CONFIG SET

Ver y modificar la configuración de Redis.

# Obtener toda la configuración
CONFIG GET *
# Obtener configuración específica
CONFIG GET maxmemory
# Establecer configuración
CONFIG SET timeout 300
# Restablecer estadísticas
CONFIG RESETSTAT

Monitoreo del Rendimiento

Monitoreo en Tiempo Real: MONITOR / SLOWLOG

Rastrear comandos e identificar cuellos de botella de rendimiento.

# Monitorear todos los comandos en tiempo real
MONITOR
# Obtener registro de consultas lentas
SLOWLOG GET 10
# Obtener longitud del registro lento
SLOWLOG LEN
# Restablecer registro lento
SLOWLOG RESET

Análisis de Memoria: MEMORY USAGE / MEMORY STATS

Analizar el consumo de memoria y la optimización.

# Obtener uso de memoria de la clave
MEMORY USAGE mykey
# Obtener estadísticas de memoria
MEMORY STATS
# Obtener informe de diagnóstico de memoria
MEMORY DOCTOR
# Purgar memoria
MEMORY PURGE

Información del Cliente: CLIENT LIST

Monitorear clientes conectados y conexiones.

# Listar todos los clientes
CLIENT LIST
# Obtener información del cliente
CLIENT INFO
# Matar conexión de cliente
CLIENT KILL ip:port
# Establecer nombre del cliente
CLIENT SETNAME "my-app"

Benchmarking: redis-benchmark

Probar el rendimiento de Redis con la herramienta de benchmark integrada.

# Benchmark básico
redis-benchmark
# Operaciones específicas
redis-benchmark -t SET,GET -n 100000
# Tamaño de carga útil personalizado
redis-benchmark -d 1024 -t SET -n 10000

Características Avanzadas

Transacciones: MULTI / EXEC

Ejecutar múltiples comandos atómicamente.

# Iniciar transacción
MULTI
SET key1 "value1"
INCR counter
# Ejecutar todos los comandos
EXEC
# Descartar transacción
DISCARD
# Vigilar claves en busca de cambios
WATCH mykey

Pub/Sub: PUBLISH / SUBSCRIBE

Implementar el paso de mensajes entre clientes.

# Suscribirse a un canal
SUBSCRIBE news sports
# Publicar mensaje
PUBLISH news "Breaking: Redis 7.0 released!"
# Suscripción por patrón
PSUBSCRIBE news:*
# Desuscribirse
UNSUBSCRIBE news

Scripting Lua: EVAL / SCRIPT

Ejecutar scripts Lua personalizados atómicamente.

# Ejecutar script Lua
EVAL "return redis.call('SET', 'key', 'value')" 0
# Cargar script y obtener SHA
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Ejecutar por SHA
EVALSHA sha1 1 mykey
# Verificar existencia del script
SCRIPT EXISTS sha1

Streams: XADD / XREAD

Trabajar con streams de Redis para datos tipo registro (log).

# Añadir entrada al stream
XADD mystream * field1 value1 field2 value2
# Leer del stream
XREAD STREAMS mystream 0
# Obtener longitud del stream
XLEN mystream
# Crear grupo de consumidores
XGROUP CREATE mystream mygroup 0

Resumen de Tipos de Datos

Cadenas (Strings): El tipo más versátil

Puede almacenar texto, números, JSON, datos binarios. Tamaño máximo: 512MB. Usar para: almacenamiento en caché, contadores, indicadores (flags).

SET user:123:name "John"
GET user:123:name
INCR page:views

Listas (Lists): Colecciones ordenadas

Listas enlazadas de cadenas. Usar para: colas (queues), pilas (stacks), feeds de actividad, elementos recientes.

LPUSH queue:jobs "job1"
RPOP queue:jobs
LRANGE recent:posts 0 9

Conjuntos (Sets): Colecciones únicas

Colecciones no ordenadas de cadenas únicas. Usar para: etiquetas (tags), visitantes únicos, relaciones.

SADD post:123:tags "redis" "database"
SISMEMBER post:123:tags "redis"
SINTER user:123:friends user:456:friends

Consejos de Configuración de Redis

Gestión de Memoria

Configurar límites de memoria y políticas de desalojo (eviction).

# Establecer límite de memoria
CONFIG SET maxmemory 2gb
# Establecer política de desalojo
CONFIG SET maxmemory-policy allkeys-lru
# Verificar uso de memoria
INFO memory

Configuración de Persistencia

Configurar opciones de durabilidad de datos.

# Habilitar AOF
CONFIG SET appendonly yes
# Establecer intervalos de guardado
CONFIG SET save "900 1 300 10 60 10000"
# Configuración de reescritura AOF
CONFIG SET auto-aof-rewrite-percentage 100

Configuración de Seguridad

Configuraciones básicas de seguridad para Redis.

# Establecer contraseña
CONFIG SET requirepass mypassword
# Autenticar
AUTH mypassword
# Deshabilitar comandos peligrosos
CONFIG SET rename-command FLUSHALL ""
# Establecer tiempo de espera
CONFIG SET timeout 300
# Keep alive de TCP
CONFIG SET tcp-keepalive 60
# Máximo de clientes
CONFIG SET maxclients 10000

Ajuste de Rendimiento

Optimizar Redis para un mejor rendimiento.

# Habilitar pipelining para múltiples comandos
# Usar agrupación de conexiones (connection pooling)
# Configurar la política maxmemory apropiada
# Monitorear consultas lentas regularmente
# Usar estructuras de datos apropiadas para los casos de uso

Enlaces Relevantes