开发者社区> 问答> 正文

redis事务既然不能回滚支持命令的一致性,那么redis谈何能支持事务呢??报错

”redis设计之初是简单高效,所以说在事务操作时命令是不会出错的,出错的可能性就是程序的问题“   那这样的意思就是把锅抛给程序咯?  如果程序能保证百分之百不出错那么关系型数据库还要啥事务呢? redis事务报错时仍会执行所有命令,这样怎么保证一致性呢?  或者说白了redis根本就不支持事务只是冠以事务的名号而已。以上纯属个人见解   又专业人士可以解释大家讨论。

展开
收起
爱吃鱼的程序员 2020-06-06 09:55:54 867 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        Redis事务主要用于不间断执行多条命令,即是存在引发错误的命令。Redis先执行命令,命令执行成功后才会记录日志,所以出现错误时无法回滚。支持完整的acid会让Redis变得复杂也可能导致性能较低。   
    

    此外,使用lua脚本也可以保证Redis不间断执行多条命令。

                            Redis 会在收到客户端修改指令后,先进行参数校验,如果没问题,就立即将该指令文
    

    本存储到 AOF 日志中,也就是先存到磁盘,然后再执行指令。

                        <p>找到网上这个解释比较到位:</p> 
    

    单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

    事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

    2020-06-06 09:56:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载