¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Leer rápido por clave: almacenes clave-valor

Después de esta lección: Puedo elegir un almacén clave-valor para el uso adecuado.

Lección de 50 min11 comandosLaboratorio de Valkey: aprende un almacén clave-valor compatible con Redis, con expiración y listas

Responder en un abrir y cerrar de ojos

La web de una librería necesita saber quién está conectado en cada clic. También debe contar visitantes y recordar las cinco últimas páginas que vio cada uno.

Una base de datos clásica puede hacerlo, pero se frena cuando miles de personas hacen clic a la vez. Un almacén clave-valor guarda esos datos pequeños en memoria y responde en una fracción de milisegundo.

Al final de esta lección

Nota

Puedo elegir un almacén clave-valor para el uso adecuado.

Palabras clave

PalabraQué significaEjemplo
Almacén clave-valoruna base de datos que guarda un valor bajo un nombre
Claveel nombre que sirve para encontrar un valorsession:ana
Caducidadel instante en que una clave se retira sola
Atómicohecho en un solo paso, que no se puede partir en dos
Listavarios valores en orden bajo una sola clave
Hashcampos con nombre guardados bajo una sola clave

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un almacén clave-valor parece un diccionario

Un almacén clave-valor guarda un valor bajo una clave y lo devuelve cuando das la clave. Se parece a un diccionario de Python, pero en un servidor que comparten muchos programas.

Valkey es un almacén libre que guarda todo en memoria. Le envías un comando como SET o GET. Cada respuesta empieza con un símbolo: + para una respuesta corta, $ para texto, : para un número y * para una lista de respuestas.

Ejemplo: leer las respuestas

EnvíasRespuestaSignifica
SET stock:taza 40+OKGuardado
GET stock:taza$2, y después 40Un texto de longitud 2, que vale 40
INCR visitas:1Un número, el valor nuevo
GET clave-ausente$-1No hay nada

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Fabricar un cliente pequeño llamado v

Comando
v() ( printf '%s\r\n' "$*" | nc -w 1 valkey 6379 )

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guardar el stock de tazas

Comando
v SET stock:taza 40

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Volver a pedirlo

Comando
v GET stock:taza

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una clave puede caducar sola

Una sesión de conexión no debe durar para siempre. Con EX 60, una clave vive 60 segundos y luego el almacén la retira. No escribes ningún código de limpieza.

TTL pregunta cuántos segundos quedan. Cuando la clave ya no está, GET responde $-1.

Guardar una sesión durante un minuto

Comando
v SET session:ana token123 EX 60

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Preguntar cuánto tiempo le queda

Comando
v TTL session:ana

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pedir una clave que no existe

Comando
v GET session:ausente

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Cuándo deja de existir una clave?

Código: python
# Una clave con caducidad es un valor y el instante en que desaparece.
entry = ["token123", 1060]
for now in [1000, 1059, 1060, 1100]:
    if now < entry[1]:
        print(now, "sigue ahí:", entry[0])
    else:
        print(now, "caducada")
# Cambia 1060 por 1090 y vuelve a ejecutar.

Contadores y listas trabajan por ti

INCR suma 1 a un número y devuelve el valor nuevo. Es atómico: mil visitantes a la vez se cuentan todos. Una lectura, una suma y una escritura por separado podrían perder alguno.

Una lista guarda valores en orden bajo una clave. RPUSH añade al final y LLEN da la longitud. Un hash guarda campos con nombre, como un perfil.

Contar visitas a mano

Código: python
# Contar las páginas vistas en un diccionario: leer, sumar, escribir.
visits = {}
for page in ["inicio", "carrito", "inicio", "inicio"]:
    if page in visits:
        visits[page] = visits[page] + 1
    else:
        visits[page] = 1
print(visits)
# Un almacén clave-valor hace esa suma en un solo paso: varios escritores no se estorban.

Contar una visita a la página de inicio

Comando
v INCR visitas:inicio

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Anotar tres páginas vistas por Ana

Comando
v RPUSH recent:ana inicio carrito pago

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Preguntar qué tipo de valor hay guardado

Comando
v TYPE recent:ana

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guardar dos campos del perfil de Ana

Comando
v HSET user:ana name Ana city Sevilla

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Leer todos los campos

Comando
v HGETALL user:ana

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error muy común

Advertencia

Mucha gente cree que un almacén clave-valor es un sitio seguro para todos los datos. La memoria es limitada y una clave puede caducar. Guarda la ficha de referencia en una base de datos. Usa el almacén para datos rápidos y de corta vida.

Para ir más lejos: cinco intentos por minuto

Una página de inicio de sesión permite cinco intentos por minuto a cada usuario. Construye ese límite con dos comandos que ya conoces: INCR sobre una clave como tries:bea, y EXPIRE tries:bea 60 tras el primer intento.

Lanza tu INCR seis veces. Apunta la sexta respuesta y lo que debería hacer la página con ella.

Sobre este laboratorio y su código: Laboratorio de Valkey: aprende un almacén clave-valor compatible con Redis, con expiración y listas

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.