Volver a Redis Básico
Listas, Sets y Sorted Sets en Redis
Listas — Ordenadas, Permiten Duplicados
# Agregar al inicio (izquierda) o al final (derecha)
RPUSH tareas "tarea1" "tarea2" "tarea3"
LPUSH tareas "tarea0"
# Leer
LRANGE tareas 0 -1 # todos: ["tarea0","tarea1","tarea2","tarea3"]
LINDEX tareas 0 # "tarea0"
LLEN tareas # 4
# Extraer
RPOP tareas # "tarea3" (desencolar del final)
LPOP tareas # "tarea0" (desencolar del inicio)
# Pop bloqueante — esperar elemento (patrón worker)
BRPOP trabajos 30 # bloquea hasta 30s esperando un elemento
# Eliminar elementos
LREM tareas 1 "tarea1" # eliminar primera ocurrencia
# Recortar a tamaño máximo
LTRIM tareas 0 99 # conservar solo los primeros 100 elementos
Patrones Cola / Pila
# Cola FIFO: productor RPUSH, consumidor BLPOP
RPUSH cola "trabajo1"
BLPOP cola 0 # bloquea hasta recibir elemento
# Pila LIFO: productor LPUSH, consumidor LPOP
LPUSH pila "item1"
LPOP pila
Sets — Sin Orden, Valores Únicos
# Agregar miembros
SADD etiquetas "redis" "database" "nosql"
# Verificar membresía
SISMEMBER etiquetas "redis" # 1 (sí)
SISMEMBER etiquetas "mysql" # 0 (no)
# Todos los miembros / contar
SMEMBERS etiquetas
SCARD etiquetas # 3
# Eliminar
SREM etiquetas "nosql"
# Miembro aleatorio (p.ej. sorteador)
SRANDMEMBER etiquetas
SPOP etiquetas # aleatorio + eliminar
# Operaciones de conjuntos
SADD equipo_a "alice" "bob" "charlie"
SADD equipo_b "bob" "charlie" "david"
SINTER equipo_a equipo_b # {"bob","charlie"} — intersección
SUNION equipo_a equipo_b # todos los miembros únicos
SDIFF equipo_a equipo_b # {"alice"} — en A pero no en B
# Guardar resultado en nueva clave
SINTERSTORE miembros_comunes equipo_a equipo_b
Sorted Sets — Ordenados por Puntuación
# Agregar con puntuación
ZADD tabla_clasificacion 1500 "alice"
ZADD tabla_clasificacion 2300 "bob"
ZADD tabla_clasificacion 1800 "carol"
# Rango ascendente
ZRANGE tabla_clasificacion 0 -1 WITHSCORES
# Top N descendente
ZREVRANGE tabla_clasificacion 0 2 WITHSCORES
# Posición de un miembro
ZRANK tabla_clasificacion "alice" # desde abajo (0 = menor)
ZREVRANK tabla_clasificacion "bob" # desde arriba (0 = mayor)
# Puntuación
ZSCORE tabla_clasificacion "alice" # "1500"
# Incrementar puntuación
ZINCRBY tabla_clasificacion 100 "alice" # nueva puntuación: 1600
# Rango por puntuación
ZRANGEBYSCORE tabla_clasificacion 1500 2000 WITHSCORES
ZCOUNT tabla_clasificacion 1500 2000
# Eliminar
ZREM tabla_clasificacion "alice"
ZREMRANGEBYRANK tabla_clasificacion 0 2 # eliminar los 3 menores
Ejemplo: Tabla de Clasificación en Node.js
const redis = new Redis();
async function registrarPuntuacion(userId: string, puntos: number) {
await redis.zadd('ranking:semanal', puntos, userId);
}
async function obtenerTop(n = 10) {
const resultados = await redis.zrevrange('ranking:semanal', 0, n - 1, 'WITHSCORES');
const jugadores = [];
for (let i = 0; i < resultados.length; i += 2) {
jugadores.push({ id: resultados[i], puntuacion: parseInt(resultados[i + 1]) });
}
return jugadores;
}
async function obtenerPosicion(userId: string) {
const posicion = await redis.zrevrank('ranking:semanal', userId);
return posicion !== null ? posicion + 1 : null; // base 1
}