Directorio de artículos
Introducción a la transacción de Redis
El comando único de Redis garantiza la atomicidad, pero la transacción no garantiza la atomicidad La
esencia de la transacción de Redis: un conjunto de comandos. Todos los comandos de una transacción se serializarán. Durante la ejecución de la transacción, se ejecutarán en orden, que es único, secuencial y exclusivo.
Pasos de la transacción de Redis
Abra la transacción,
ordene unirse al equipo,
ejecute la transacción
Ejecución normal
127.0.0.1:6379> multi #开启事务
OK #命令入队
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec #执行事务
1) OK
2) OK
3) "v2"
4) OK
Cancelación de la transacción.
127.0.0.1:6379> multi #开启事务
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> discard #取消事务
OK
127.0.0.1:6379> get k4 #事务队列中命令都不会被执行
(nil)
Excepción de tipo de compilación (el código es incorrecto, el comando es incorrecto), los comandos de la transacción no se ejecutarán
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> getset k3
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> set k5 v5
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k5
(nil)
Excepciones en tiempo de ejecución, si hay gramaticalidad en la cola de transacciones, otros comandos se pueden ejecutar normalmente cuando se ejecuta el comando, y el comando incorrecto genera una excepción
127.0.0.1:6379> set k1 "v1"
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> get k3
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range
2) OK
3) OK
4) "v3"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> get k3
"v3"
Monitoreo de Redis (actúa como un bloqueo optimista, compara si hay cambios al modificar)
Ejecución normal
La transacción finaliza normalmente, no hay cambios durante la ejecución de los datos, un solo hilo
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby money 20
QUEUED
127.0.0.1:6379> incrby money 20
QUEUED
127.0.0.1:6379> exec
1) (integer) 80
2) (integer) 100
Pruebe el valor de cambio de subprocesos múltiples
127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby money 10
QUEUED
127.0.0.1:6379> exec
(nil)
Operar en otro cliente antes de que se ejecute la transacción anterior
127.0.0.1:6379> incrby money 1000
(integer) 1100
La transacción final fallará
Luego, primero desbloquee, vuelva a monitorear y luego ejecute la transacción
127.0.0.1:6379> unwatch
OK
127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby money 100
QUEUED
127.0.0.1:6379> incrby money 1
QUEUED
127.0.0.1:6379> exec
1) (integer) 1000
2) (integer) 1001
referencia
https://www.bilibili.com/video/BV1S54y1R7SB