← Volver al listado de tecnologías

Tipos de Datos en Valkey

Por: Artiko
valkeytipos-datosstringslistassets

Tipos de Datos

Strings

El tipo más básico. Puede contener texto, números o datos binarios (hasta 512MB).

# Establecer y obtener
SET nombre "Juan"
GET nombre
# "Juan"

# Números
SET contador 100
INCR contador      # 101
INCRBY contador 5  # 106
DECR contador      # 105

# Expiración
SET sesion "abc123" EX 3600  # Expira en 1 hora
SETEX sesion 3600 "abc123"   # Equivalente
TTL sesion                    # Segundos restantes

# Solo si no existe
SETNX clave "valor"  # Retorna 1 si se creó, 0 si existía

# Múltiples claves
MSET a 1 b 2 c 3
MGET a b c
# 1) "1"
# 2) "2"
# 3) "3"

# Append
APPEND nombre " García"
GET nombre
# "Juan García"

# Longitud
STRLEN nombre  # 11

Lists

Listas enlazadas de strings. Útiles para colas y stacks.

# Agregar elementos
LPUSH tareas "Tarea 1"  # Izquierda (inicio)
RPUSH tareas "Tarea 2"  # Derecha (final)
LPUSH tareas "Tarea 0"

# Ver lista
LRANGE tareas 0 -1
# 1) "Tarea 0"
# 2) "Tarea 1"
# 3) "Tarea 2"

# Obtener por índice
LINDEX tareas 0  # "Tarea 0"

# Quitar elementos
LPOP tareas  # Quita del inicio
RPOP tareas  # Quita del final

# Longitud
LLEN tareas

# Insertar
LINSERT tareas BEFORE "Tarea 1" "Nueva"

# Bloquear hasta obtener (para colas)
BLPOP cola 30  # Espera 30 segundos
BRPOP cola 30

Caso de uso: Cola de trabajos

# Productor agrega trabajos
RPUSH trabajos '{"tipo":"email","destino":"[email protected]"}'

# Consumidor procesa
BLPOP trabajos 0  # Espera indefinidamente

Sets

Colecciones no ordenadas de strings únicos.

# Agregar miembros
SADD frutas "manzana" "naranja" "pera"
SADD frutas "manzana"  # No duplica

# Ver todos
SMEMBERS frutas
# 1) "manzana"
# 2) "naranja"
# 3) "pera"

# Verificar pertenencia
SISMEMBER frutas "manzana"  # 1
SISMEMBER frutas "uva"      # 0

# Cardinalidad
SCARD frutas  # 3

# Quitar
SREM frutas "pera"

# Aleatorio
SRANDMEMBER frutas    # Un elemento aleatorio
SPOP frutas           # Quita y retorna aleatorio

# Operaciones de conjuntos
SADD A 1 2 3
SADD B 2 3 4

SINTER A B     # Intersección: 2, 3
SUNION A B     # Unión: 1, 2, 3, 4
SDIFF A B      # Diferencia: 1

Caso de uso: Tags únicos

SADD articulo:1:tags "python" "tutorial" "backend"
SADD articulo:2:tags "python" "avanzado"

# Artículos con tag python
SINTER articulo:1:tags articulo:2:tags

Hashes

Mapas de campo-valor. Ideales para representar objetos.

# Establecer campos
HSET usuario:1 nombre "Ana" edad 28 email "[email protected]"

# Obtener campo
HGET usuario:1 nombre  # "Ana"

# Obtener múltiples
HMGET usuario:1 nombre edad

# Obtener todo
HGETALL usuario:1
# 1) "nombre"
# 2) "Ana"
# 3) "edad"
# 4) "28"
# 5) "email"
# 6) "[email protected]"

# Solo claves o valores
HKEYS usuario:1
HVALS usuario:1

# Verificar existencia
HEXISTS usuario:1 nombre  # 1

# Incrementar
HINCRBY usuario:1 edad 1   # 29
HINCRBYFLOAT producto:1 precio 0.50

# Eliminar campo
HDEL usuario:1 email

# Longitud
HLEN usuario:1

Caso de uso: Sesiones de usuario

HSET sesion:abc123 user_id 42 ip "192.168.1.1" login_time 1702800000
EXPIRE sesion:abc123 3600

Sorted Sets (ZSets)

Sets ordenados por score (número).

# Agregar con score
ZADD ranking 100 "jugador1"
ZADD ranking 85 "jugador2"
ZADD ranking 120 "jugador3"

# Ver ordenado (menor a mayor)
ZRANGE ranking 0 -1
# 1) "jugador2"
# 2) "jugador1"
# 3) "jugador3"

# Con scores
ZRANGE ranking 0 -1 WITHSCORES

# Mayor a menor
ZREVRANGE ranking 0 -1 WITHSCORES

# Score de un miembro
ZSCORE ranking "jugador1"  # "100"

# Ranking (posición)
ZRANK ranking "jugador1"     # 1 (0-indexed)
ZREVRANK ranking "jugador1"  # 1 (desde arriba)

# Por rango de score
ZRANGEBYSCORE ranking 80 100
ZRANGEBYSCORE ranking -inf +inf

# Incrementar score
ZINCRBY ranking 15 "jugador2"  # 100

# Cardinalidad
ZCARD ranking

# Contar en rango
ZCOUNT ranking 90 110

# Eliminar
ZREM ranking "jugador2"
ZREMRANGEBYSCORE ranking 0 50

Caso de uso: Leaderboard

# Registrar puntuación
ZINCRBY leaderboard 50 "usuario:42"

# Top 10
ZREVRANGE leaderboard 0 9 WITHSCORES

Tipos avanzados

Bitmaps

SETBIT usuarios:activos 42 1   # Usuario 42 activo
GETBIT usuarios:activos 42     # 1
BITCOUNT usuarios:activos      # Cantidad de activos

HyperLogLog

Conteo aproximado de elementos únicos.

PFADD visitantes "user1" "user2" "user3"
PFCOUNT visitantes  # ~3

Streams

Cola de mensajes persistente.

XADD eventos * tipo "login" usuario "juan"
XREAD STREAMS eventos 0

Ejercicios

  1. Crea un hash para almacenar datos de un producto
  2. Implementa un ranking con Sorted Sets
  3. Usa una lista como cola FIFO

Resumen

TipoUso principalComandos clave
StringCache, contadoresSET, GET, INCR
ListColas, stacksLPUSH, RPOP, BLPOP
SetTags, relacionesSADD, SINTER, SMEMBERS
HashObjetosHSET, HGET, HGETALL
ZSetRankingsZADD, ZRANGE, ZRANK