Redis的事务是否是原子性的?
今天看书遇到一个redis事务的描述,如下:
《Redis深度历险 核心原理与应用实践》
但是在另一个菜鸟教程中,是这么描述的:
www.runoob.com/redis/redis-transac...
是我对这俩段理解有误吗?
redis事务不是原子性,咱们理解的MySQL的事务原子性是一个最小单位,要么0要么1不可能0.5。但是reids的事务只是单纯的命令集合而已
官网写了,有原子性。redis.io/topics/transactions

另外,原子性就是指一堆命令要么都执行,要么都不执行。和 MySQL 中提到的原子性是一个意思。
上面引号中的原子性我理解是指事务中的指令执行的时候不会有其他非事务中的指令插入队执行
至于 Redis 事务是否可以保证原子性,要分情况:
1、如果命令入队时就报错,事务不会执行,可以保证原子性
2、如果命令实际执行时报错,就不能保证原子性
下面命令
incr k1
会报错,但是会忽略这错误,继续向下执行如果你把
incr
写成incx
写错了 全部不会进行执行。只有这种区别redis定义的原子性是全部都执行完就行了,中间报错也不管,因为redis觉得这种类型错误,应该是在你的代码中就发现这种问题跟他无关
可以使用lua脚本实现原子性操作