English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Transacciones de Redis

Las transacciones de Redis pueden ejecutar múltiples comandos a la vez y ofrecen las siguientes tres garantías importantes:

  • Las operaciones en lote se ponen en cola en el caché antes de enviar el comando EXEC.

  • Después de recibir el comando EXEC, ingrese en la ejecución de la transacción; si alguna instrucción en la transacción falla, las otras instrucciones aún se ejecutarán.

  • En el proceso de ejecución de la transacción, las solicitudes de comandos enviadas por otros clientes no se insertan en la secuencia de comandos de ejecución de la transacción.

Un transacción pasa por tres etapas desde su inicio hasta su ejecución:

  • Comience la transacción.

  • Coloque comandos en la cola.

  • Ejecute la transacción.

Ejemplo en línea

A continuación se muestra un ejemplo de una transacción, que primero MULTI Comience una transacción, luego coloque múltiples comandos en la cola de la transacción y, finalmente, EXEC Las instrucciones pueden desencadenar una transacción y ejecutar todas las instrucciones en la transacción al unísono:

redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-name "Mastering C"++ en 21 dias"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C"++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C"++ en 21 dias"
3) (entero) 3
4) 1) "Mastering Series"
   2) "C"++"
   3) "Programming"

La ejecución de una instrucción individual de Redis es atómica, pero Redis no ha añadido ningún mecanismo de mantenimiento de la atomicidad en las transacciones, por lo que la ejecución de las transacciones de Redis no es atómica.

Las transacciones pueden entenderse como un paquete de ejecución de scripts en lote, pero las instrucciones en lote no son operaciones atómicas; el fracaso de alguna instrucción en el medio no causará el reverso de las instrucciones ya realizadas, ni causará que las instrucciones posteriores no se ejecuten.

Esta es la descripción en el sitio web oficial  From redis docs on transacciones:

Es importante destacar que incluso cuando un comando falla, todos los otros comandos en la cola se procesan; Redis no detendrá el procesamiento de comandos.

Por ejemplo:

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

Si falla en set b bbb, set a ya ha sido exitoso y no se revertirá, set c seguirá ejecutándose.

Comandos de transacción de Redis

La siguiente tabla enumera los comandos relacionados con las transacciones de redis:

NúmeroComando y descripción
1DISCARD
Cancelar la transacción, abortar la ejecución de todos los comandos dentro del bloque de transacción.
2EXEC
Ejecutar todos los comandos dentro del bloque de transacción.
3MULTI
Marcar el inicio de un bloque de transacción.
4UNWATCH
Cancelar el comando WATCH para todas las claves.
5WATCH clave [clave ...]
Monitorear una (o varias) clave, si esta (o estas) clave es modificada por otros comandos antes de la ejecución de la transacción, la transacción será interrumpida.