Redis事务处理不回滚

redis 的事务处理不像传统的关系型数据库那样支持回滚

redis事务相关命令
"multi":进入事务上下文
"exec":顺序执行事务等待队列
"discard":取消当前事务
redis在进入事务上下文后,并不会马上就执行命令,而是把命令放入一个队列,在键入exec后,才会根据队列的顺序,顺序执行队列里的命令

【Redis事务处理不回滚】我们可以通过一些例子来看看redis的事务处理
在命令行里输入"multi"后,这时就已经进入了事务的上下文里
Redis事务处理不回滚
文章图片


我们可以设置三个键来测试一下
在事务上下文里,成功将键加入事务队列里的话,就会返回"QUEUED",
Redis事务处理不回滚
文章图片


然后,输入"exec"命令,redis就会按照顺序来执行
返回"OK"表示命令执行成功
Redis事务处理不回滚
文章图片


查看一下,可以看到三个键均成功被赋值
Redis事务处理不回滚
文章图片


当然,如果在事务上下文里,你想取消这次事务了,可以通过输入"discard"来放弃这次事务,那么这次所有在事务上下文里输入的命令都不会执行
Redis事务处理不回滚
文章图片


而说回redis的事务并不支持回滚,我们可以通过下面例子来看到
在上面刚开始的时候我们设置了三个键,其中"lim"是字符串型,而"tim"、"pim"则是整型数字,在下面图中,可以看到三个键都是用了"incr"自增命令,返回都是"QUEUED",说明都成功的加入了事务处理等待队列,然而执行了"exec"后,其中的"lim"键因为出错了所以值还是保持不变,可是其它两个键却成功的自增了,数值发生了改变,并没有出现像传统关系型数据库那样的事务回滚(所有命令都回滚恢复成原先的状态),redis依旧执行了那些没出错的命令
Redis事务处理不回滚
文章图片

所以能看出来,redis的事务处理并不支持回滚

    推荐阅读