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 }