Command Palette

Search for a command to run...

ES·EN

Nivel 1 · 20 min

Estructuras de Datos Redis

Redis no es solo un caché de clave-valor — es una base de datos de estructuras de datos en memoria. Strings, Hashes, Lists, Sets, Sorted Sets y Streams son estructuras nativas con comandos especializados. Elegir la estructura correcta determina el rendimiento y la expresividad de tu solución.

Strings y Hashes

String es la estructura más básica — puede almacenar texto, JSON serializado o valores binarios (hasta 512MB). Comandos: SET, GET, INCR, EXPIRE, SETNX (set if not exists — útil para locks distribuidos). Hash almacena un map de campos dentro de una clave — ideal para objetos como usuarios o sesiones. HSET user:1 name ''Ana'' age 25. Más eficiente que JSON serializado cuando modificás campos individuales.

Lists y Sets

List es una lista doblemente enlazada — LPUSH/RPUSH/LPOP/RPOP. Ideal para colas (RPUSH + LPOP), stacks (LPUSH + LPOP) y feeds de actividad. LRANGE para paginación. Set es una colección de strings únicos — SADD, SREM, SISMEMBER, SMEMBERS. Útil para tags, seguidores únicos, presencia. SUNION, SINTER, SDIFF para operaciones entre sets. Sorted Set agrega score — ZADD, ZRANGE, ZRANGEBYSCORE — perfecto para leaderboards y rate limiting.

Sorted Sets y Streams

Sorted Set mantiene unicidad + orden por score. ZADD leaderboard 1500 ''player1''. ZREVRANGE leaderboard 0 9 para top 10. Los scores pueden ser timestamps — útil para rate limiting en ventana deslizante. Stream es una estructura append-only para event streaming (como Kafka en pequeño). XADD, XREAD, consumer groups. Ideal para event sourcing local, audit logs y notificaciones en tiempo real.

Puntos clave

  • Hash es más eficiente que String para objetos — permite leer/escribir campos individuales sin deserializar todo el objeto.
  • Sorted Set es la estructura más versátil de Redis — leaderboards, rate limiting, cola con prioridad, índice temporal.
  • Elegí la estructura por los queries que necesitás hacer, no por cómo representarías los datos en una DB relacional.

Code example

// Leaderboard con Sorted Set
ZADD game:leaderboard 9850 "player:alice"
ZADD game:leaderboard 8200 "player:bob"
ZREVRANGE game:leaderboard 0 9 WITHSCORES  -- top 10
ZRANK game:leaderboard "player:alice"  -- posicion de alice
ZINCRBY game:leaderboard 150 "player:bob"  -- sumar puntos