Notas de estudio de Redis 2 transacción de Redis

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

Supongo que te gusta

Origin blog.csdn.net/qq_43610675/article/details/113665542
Recomendado
Clasificación