Redis事务

2019-10-28  本文已影响0人  一如既往wfqwfq

1、Redis事务机制

严格意义来讲,Redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的。Redis的事务实质上是命令的集合,在一个事务中要么所有命令都被执行,要么所有事务都不执行。(不关心执行结果)
Redis事务三个阶段:

从下图中可以看出,当开启事务后,所要执行的命令并不是马上执行,而是放入队列中,等事务提交后批量执行。

image.png
注意:

2、Redis事务命令

image.png

3、实例

1.执行成功

redis开启事务后,执行的命令并不是马上被执行,而是做入队操作,提交事务后才批量执行命令。


image.png

2.执行失败

执行一个错误命令,则事务中所有命令都不执行。

image.png

3.执行成功,但是结果失败

set k1、k2、k3都执行成功了,但是执行incr k2的时候因为k2是字符串无法做自增操作,所以incr k2失败。可以得出结论redis事务不保证原子性,只要命令(incr)对了,事务就会执行,不管执行结果是否成功。


image.png

4.WATCH测试

设置k1,并对k1监控。事务等终端2对k1修改后提交


image.png

修改k1的值


image.png
k1被终端2给修改了,终端1的事务无法执行。

4、总结

1、Redis事务采用的是队列缓存和批量处理的机制,事务中命令并不马上执行,先入队,等事务提交后一起执行。
2、Redis事务关心的是事务中命令是否被执行,而不关心命令执行后结果是否正确成功。
3、不考虑外界因素情况下,Redis事务中命令是否执行可以结合java的异常机制来理解。命令错误,则全部不执行。(类比java强制性异常)命令正确,但是执行失败,其他正确命令正常执行。(运行时异常)

上一篇 下一篇

猜你喜欢

热点阅读