事务

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没变化就能正常提交

 

posted @ 2020-11-27 20:26  圣金巫灵  阅读(110)  评论(0编辑  收藏  举报