Las transacciones en Redis permiten agrupar múltiples comandos en una sola operación atómica. Esto significa que todos los comandos dentro de una transacción se ejecutan secuencialmente y de manera indivisible, sin que otros comandos se ejecuten entre ellos. Las transacciones en Redis se gestionan mediante los comandos MULTI
, EXEC
, DISCARD
y WATCH
.
Conceptos Clave
- MULTI: Inicia una transacción.
- EXEC: Ejecuta todos los comandos encolados en la transacción.
- DISCARD: Cancela la transacción, descartando todos los comandos encolados.
- WATCH: Observa una o más claves para abortar la transacción si alguna de ellas cambia antes de
EXEC
.
Ejemplo Básico de Transacción
A continuación, se muestra un ejemplo básico de cómo usar transacciones en Redis:
# Iniciar una transacción MULTI # Encolar comandos SET key1 "value1" SET key2 "value2" # Ejecutar la transacción EXEC
Explicación del Código
- MULTI: Inicia una transacción. A partir de este punto, todos los comandos se encolan.
- SET key1 "value1": Encola el comando para establecer
key1
con el valorvalue1
. - SET key2 "value2": Encola el comando para establecer
key2
con el valorvalue2
. - EXEC: Ejecuta todos los comandos encolados de manera atómica.
Uso de WATCH
El comando WATCH
se utiliza para implementar transacciones optimistas. Permite observar una o más claves y abortar la transacción si alguna de ellas cambia antes de ejecutar EXEC
.
Ejemplo con WATCH
# Observar la clave 'key1' WATCH key1 # Iniciar una transacción MULTI # Encolar comandos SET key1 "new_value1" SET key2 "new_value2" # Ejecutar la transacción EXEC
Explicación del Código
- WATCH key1: Observa la clave
key1
. Sikey1
cambia antes deEXEC
, la transacción se abortará. - MULTI: Inicia una transacción.
- SET key1 "new_value1": Encola el comando para establecer
key1
con el valornew_value1
. - SET key2 "new_value2": Encola el comando para establecer
key2
con el valornew_value2
. - EXEC: Ejecuta todos los comandos encolados. Si
key1
ha cambiado desde elWATCH
, la transacción se abortará.
Ejercicio Práctico
Ejercicio 1: Implementar una Transacción Básica
- Inicia una transacción.
- Establece
user:1000:name
a "Alice". - Establece
user:1000:email
a "[email protected]". - Ejecuta la transacción.
Solución
MULTI SET user:1000:name "Alice" SET user:1000:email "[email protected]" EXEC
Ejercicio 2: Implementar una Transacción con WATCH
- Observa la clave
balance:1000
. - Inicia una transacción.
- Decrementa
balance:1000
en 50. - Incrementa
balance:2000
en 50. - Ejecuta la transacción.
Solución
Errores Comunes y Consejos
- No usar
EXEC
después deMULTI
: Si olvidas ejecutarEXEC
, los comandos encolados no se ejecutarán. - Cambios en claves observadas con
WATCH
: Si una clave observada cambia antes deEXEC
, la transacción se abortará. Asegúrate de manejar este caso en tu aplicación. - Uso incorrecto de
DISCARD
:DISCARD
cancela la transacción, descartando todos los comandos encolados. Úsalo solo si realmente deseas abortar la transacción.
Conclusión
Las transacciones en Redis son una herramienta poderosa para garantizar la atomicidad de múltiples comandos. Con MULTI
, EXEC
, DISCARD
y WATCH
, puedes controlar y asegurar la consistencia de tus datos en Redis. Practica con los ejemplos y ejercicios proporcionados para dominar el uso de transacciones en tus aplicaciones.
Curso de Redis
Módulo 1: Introducción a Redis
Módulo 2: Estructuras de Datos de Redis
Módulo 3: Comandos y Operaciones de Redis
Módulo 4: Persistencia en Redis
- Instantáneas (RDB)
- Archivos de Solo Adición (AOF)
- Configuración de Persistencia
- Respaldo y Restauración
Módulo 5: Seguridad en Redis
Módulo 6: Optimización del Rendimiento de Redis
Módulo 7: Clustering y Alta Disponibilidad en Redis
Módulo 8: Módulos y Extensiones de Redis
- Introducción a los Módulos de Redis
- Módulos Populares de Redis
- Creando Módulos Personalizados
- Usando Redis con Otras Tecnologías