Redis 事务是否具备原子性?

Redis 事务是否具备原子性?

总结:
在事务开始后,用户可以输入事务要执行的命令;
在命令入事务队列前,会对命令进行检查,如果命令不存在或者是命令参数不对,
则会返回错误给客户端,并且修改客户端状态。
当后面客户端执行 EXEC 命令时,服务器就会直接拒绝执行此事务了。
所以说,Redis 事务其实是支持原子性的!
即使 Redis 不支持事务回滚机制,但是它会检查每一个事务中的命令是否错误。

但是我们要注意一个点就是:
Redis 事务不支持检查那些程序员自己逻辑错误。
例如对 String 类型的数据库键执行对 HashMap 类型的操作!

Redis 使用了事务队列来预先将执行命令存储起来,并且会对其进行格式检查的,提前就知道命令是否可执行了。
所以如果只要有一个命令是错误的,那么这个事务是不能执行的。

Redis 作者认为基本只会出现在开发环境的编程错误其实在生产环境基本是不可能出现的
(例如对 String 类型的数据库键执行 LPUSH 操作),
所以他觉得没必要为了这事务回滚机制而改变 Redis 追求简单高效的设计主旨。

所以最后,其实 Redis 事务真正支持原子性的前提:开发者不要傻不拉几的写有逻辑问题的代码!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值