redis事务,如何理解它命令组合里面的非原子性?
发布于 作者:苏南大叔 来源:程序如此灵动~

本文依旧讲述redis
事务,它和mysql
的事务是不同的。redis
的事务更像是个命令组合,并不具有事务最典型的原子性。那么,当内部命令里有执行失败的时候,会不会影响其它命令的执行呢?这就是本文要讨论的问题。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程故事。测试环境:win10
,redis@5.0.14.1
。redis
事务更像是一个命令组合。来看看命令组合里面有命令出错的话,会发生什么。
前文回顾
本文不涉及watch
这个特殊命令,都是在同一个进程里面执行的。有关带watch
的redis
事务的完整用法,可以参考:
redis
官方没有提供windows
版本的redis
程序,官方建议在windows
系统下的wsl
虚拟机中使用redis
。参考文章:
- https://newsn.net/say/wsl-redis.html
- https://newsn.net/say/wsl-redis-2.html
- https://newsn.net/say/redis-win.html
情况一,未识别的命令【全体报废】
输出:
输出(nil)
,由于调用了不存在的命令。整个redis
事务报废,触发了discard
。即使正确的语句也没有被执行。

情况二,错误的使用方式【各玩各的】
输出:
这种情况下,age
输出为2
。可见,错误的命令调用(但是这个命令存在)并不影响其它命令的执行。
结语
更多苏南大叔的redis
相关经验文章,请点击:


