Redis事务处理不回滚

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

 

redis事务相关命令

"multi":进入事务上下文

"exec":顺序执行事务等待队列

"discard":取消当前事务

redis在进入事务上下文后,并不会马上就执行命令,而是把命令放入一个队列,在键入exec后,才会根据队列的顺序,顺序执行队列里的命令

 

我们可以通过一些例子来看看redis的事务处理

在命令行里输入"multi"后,这时就已经进入了事务的上下文里

 

我们可以设置三个键来测试一下

在事务上下文里,成功将键加入事务队列里的话,就会返回"QUEUED",

Redis事务处理不回滚_第1张图片

 

然后,输入"exec"命令,redis就会按照顺序来执行

返回"OK"表示命令执行成功

 

查看一下,可以看到三个键均成功被赋值

Redis事务处理不回滚_第2张图片

 

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

Redis事务处理不回滚_第3张图片

 

而说回redis的事务并不支持回滚,我们可以通过下面例子来看到

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

Redis事务处理不回滚_第4张图片

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

你可能感兴趣的:(中间件)