← Volver al listado de tecnologías
Tipos de Datos en Valkey
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
- Crea un hash para almacenar datos de un producto
- Implementa un ranking con Sorted Sets
- Usa una lista como cola FIFO
Resumen
| Tipo | Uso principal | Comandos clave |
|---|---|---|
| String | Cache, contadores | SET, GET, INCR |
| List | Colas, stacks | LPUSH, RPOP, BLPOP |
| Set | Tags, relaciones | SADD, SINTER, SMEMBERS |
| Hash | Objetos | HSET, HGET, HGETALL |
| ZSet | Rankings | ZADD, ZRANGE, ZRANK |