Data Team MICValkey es un almacén de datos en memoria (fork de Redis) para caché de respuestas API, feature store online para Feast (ML), y gestión de sesiones. Valkey es compatible con Redis y accesible en <tu-url>.
Conexión vía CLI (valkey-cli)
$ valkey-cli -h <tu-url> -p <puerto>
valkey> PING
PONG
Verificar versión y conexión
valkey> INFO server
valkey> DBSIZE
Comando de autenticación (si está habilitado)
valkey-cli -h <tu-url> -a <password>
| Parámetro | Ejemplo | Descripción |
|---|---|---|
-h |
<tu-url> |
Host del servidor |
-p |
<puerto> |
Puerto (por defecto) |
-a |
<password> |
Contraseña (si aplica) |
-n |
0 |
Seleccionar base de datos (0-15) |
-c |
-c |
Conexión en cluster mode |
--raw |
--raw |
Output sin formato |
--csv |
--csv |
Output en CSV |
Establecer y obtener valores
valkey> SET cache_key "valor"
OK
valkey> GET cache_key
"valor"
valkey> GETSET cache_key "nuevo"
"valor"
Operaciones numéricas
valkey> SET contador 10
OK
valkey> INCR contador
11
valkey> INCRBY contador 5
16
valkey> DECR contador
15
Múltiples claves (MSET/MGET)
valkey> MSET key1 "val1" key2 "val2" key3 "val3"
OK
valkey> MGET key1 key2 key3
1) "val1"
2) "val2"
3) "val3"
Almacenar metadatos de usuario
valkey> HSET usuario:123 nombre "Juan" email "[email protected]" pais "CO"
3
valkey> HGET usuario:123 nombre
"Juan"
valkey> HGETALL usuario:123
1) "nombre"
2) "Juan"
3) "email"
4) "[email protected]"
5) "pais"
6) "CO"
Operaciones con hashes
valkey> HEXISTS usuario:123 email
1
valkey> HDEL usuario:123 pais
1
valkey> HLEN usuario:123
2
valkey> HKEYS usuario:123
1) "nombre"
2) "email"
Cola de eventos o actividades recientes
valkey> RPUSH eventos "evento1" "evento2" "evento3"
3
valkey> LLEN eventos
3
valkey> LRANGE eventos 0 -1
1) "evento1"
2) "evento2"
3) "evento3"
Operaciones de cola (FIFO)
valkey> RPUSH cola_tareas tarea1 tarea2 tarea3
3
valkey> LPOP cola_tareas
"tarea1"
valkey> BLPOP cola_tareas 10
(waits up to 10 seconds for item)
Tracking de usuarios únicos, tags
valkey> SADD usuarios_activos user1 user2 user3 user1
3
valkey> SCARD usuarios_activos
3
valkey> SMEMBERS usuarios_activos
1) "user1"
2) "user2"
3) "user3"
Operaciones de conjuntos
valkey> SISMEMBER usuarios_activos user1
1
valkey> SREM usuarios_activos user2
1
valkey> SINTER set1 set2
(intersection)
Ranking, leaderboards, features con score
valkey> ZADD top_clientes 1000 cliente_A 2500 cliente_B 1500 cliente_C
3
valkey> ZRANGE top_clientes 0 -1
1) "cliente_A"
2) "cliente_C"
3) "cliente_B"
valkey> ZRANGE top_clientes 0 -1 WITHSCORES
1) "cliente_A"
2) "1000"
3) "cliente_C"
4) "1500"
5) "cliente_B"
6) "2500"
Ranking invertido (mayor a menor)
valkey> ZREVRANGE top_clientes 0 -1 WITHSCORES
1) "cliente_B"
2) "2500"
3) "cliente_C"
4) "1500"
5) "cliente_A"
6) "1000"
Expiración en segundos
valkey> SET sesion:abc123 "data" EX 3600
OK
valkey> TTL sesion:abc123
3599
Expiración en milisegundos
valkey> PSETEX cache_feature 60000 "feature_value"
OK
valkey> PTTL cache_feature
59998
Expiración en timestamp Unix
valkey> EXPIREAT clave_temporal 1678900000
1
Inspeccionar y modificar expiración
valkey> TTL clave
7200
valkey> PERSIST clave
1
valkey> TTL clave
-1
Caché de respuestas API
valkey> SET api_response:ventas_hoy "{...}" EX 300
OK
valkey> GET api_response:ventas_hoy
Terminal 1: Suscriptor
valkey> SUBSCRIBE canal_alertas
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "canal_alertas"
3) 1
Terminal 2: Publicador
valkey> PUBLISH canal_alertas "Alerta: alta latencia detectada"
1
valkey> SUBSCRIBE canal_1 canal_2 canal_3
valkey> PSUBSCRIBE eventos_*
Usar en aplicaciones (e.g., Python)
import redis
r = redis.Redis(host='<tu-url>', port=<puerto>, decode_responses=True)
pubsub = r.pubsub()
pubsub.subscribe('canal_alertas')
for message in pubsub.listen():
if message['type'] == 'message':
print(f"Evento: {message['data']}")
Estado del servidor
valkey> INFO
valkey> INFO memory
valkey> INFO stats
Memoria usada
valkey> MEMORY USAGE clave
valkey> MEMORY STATS
Operaciones en tiempo real (monitor)
valkey> MONITOR
Clientes conectados
valkey> CLIENT LIST
valkey> CLIENT GETNAME
valkey> CLIENT ID
Claves con patrón (cuidado en producción, puede ser lento)
valkey> KEYS api_response:*
valkey> KEYS usuario:*
Usar SCAN para explorar (más seguro)
valkey> SCAN 0 MATCH usuario:* COUNT 100
Eliminar claves con patrón
valkey> EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 "clave_temporal:*"
| Patrón | Descripción | Ejemplo |
|---|---|---|
cache:<dominio>:<id> |
Caché API | cache:usuarios:123 |
sesion:<token> |
Sesiones de usuario | sesion:abc123xyz |
feat:<feature>:<id> |
Feature store (Feast) | feat:churn_score:4567 |
queue:<tarea> |
Colas de tareas | queue:email_pendientes |
lock:<recurso> |
Locks distribuidos | lock:reporte_diario |
Instalación
pip install redis
Conexión y operaciones básicas
import redis
r = redis.Redis(
host='<tu-url>',
port=<puerto>,
db=0,
decode_responses=True
)
# Strings
r.set('cache_key', 'valor', ex=300)
valor = r.get('cache_key')
# Hashes
r.hset('usuario:123', mapping={
'nombre': 'Juan',
'email': '[email protected]'
})
datos = r.hgetall('usuario:123')
# Listas (cola)
r.rpush('cola_tareas', 'tarea1', 'tarea2')
tarea = r.lpop('cola_tareas')
# Expiración
r.expire('cache_key', 3600)
Usar transacciones (pipeline)
pipe = r.pipeline()
pipe.set('key1', 'val1')
pipe.set('key2', 'val2')
pipe.execute()
Manejo de errores
try:
valor = r.get('clave')
except redis.ConnectionError:
print("No se pudo conectar a Valkey")