English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
La siguiente tabla enumera los comandos relacionados con las transacciones de redis:
Número | Comando y descripción |
---|---|
1 | DISCARD Cancelar la transacción, abortar la ejecución de todos los comandos dentro del bloque de transacción. |
2 | EXEC Ejecutar todos los comandos dentro del bloque de transacción. |
3 | MULTI Marcar el inicio de un bloque de transacción. |
4 | UNWATCH Cancelar el comando WATCH para todas las claves. |
5 | WATCH 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. |