Redis5事务 和Watch

事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令

 

127.0.0.1:6379> multi
OK
127.0.0.1:6379> zadd result  123 php
QUEUED
127.0.0.1:6379> zadd result  11 php
QUEUED
127.0.0.1:6379> exec
1) (integer) 0
2) (integer) 0
Redis保证一个事务中的所有命令要么都执行,要么都不执行。
如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。
而一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令

错误处理

exec 完

如果有一个命令执行错误了,那么后面的命令将不会执行,但是之前的语句却全都执行了.. 但是redis 并没有提供回滚功能,所有的烂摊子必须由开发者处理

Watch

如果需要对一个键的值++,但是在执行的时候其他客户端又对这个值修改了

监听一个变量在执行事务的时候是否被修改了,如果被修改了事务取消

监听完这个变量,只要不是在事务里头修改的那就是要取消的

执行exec 之后会对所有的键取消监控

watch 监听的键过期了,不会认为该键被改变

127.0.0.1:6379> set count 1
OK
127.0.0.1:6379> watch count
OK
127.0.0.1:6379> set count 2
QUEUED
127.0.0.1:6379> multi 
OK 
127.0.0.1:6379> set count 3 
QUEUED 
127.0.0.1:6379> exec 
(nil)

!!!

原文地址:https://www.cnblogs.com/wlphp/p/11630536.html