事务
redis 的事务由multi , exec , discard, watch, unwatch这五个命令控制。
redis的单个命令都是原子性的,这里事务是作用于命令集合
redis为了性能方面不支持回滚
打开事务 : multi
提交事务: exec
watch: 可以对一个或者多个key进行监控,如果key发生变化,那么事务就不会执行。否则事务就可以正常进行。
1. 测试一下multi, exec:
在客户端1打开事务:
去客户端2查询没查到:
客户端1提交事务:
再去客户端2就查询到了:
2. 测试一下discard
客户端1打开事务,设置值,再discard
客户端2去取,啥也没有
再在客户端1 设值,发现已经显示ok了,说明前面的事务被抛弃了,并且没提交的事务的内容也没了(vv没存进去)
客户端2能get到zz:
3. 测试一下watch
这里a=1, 如果在事务阶段,a的值没变化,事务能提交成功。如果a的值变化了,即使exec,事务也没有提交成功。下面就测试这个过程:
在客户端1 设置a=1, watch a, 打开事务, set ss, (还没提交事务):
在客户端2 修改a:
回客户端1提交事务:
再查看这个ss 事务是否被提交 : 否 -因为watch a发生了变化 ,如果a没变化就能正常提交