redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
Activity
Snailclimb commentedon Sep 2, 2019
好的 感谢补充。我已经同步:https://github.com/Snailclimb/JavaGuide/blob/master/docs/database/Redis/Redis.md#redis-%E4%BA%8B%E5%8A%A1
fangjunpang commentedon Oct 2, 2019
不一定吧 -> https://blog.csdn.net/yangshangwei/article/details/82866216
WeaveOne commentedon Oct 9, 2019
allenshao9 commentedon Apr 30, 2020
1.若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行
2.若在事务队列中存在语法性错误(类似于java的1/0的运行时异常),则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。
JasonLaw1994 commentedon May 12, 2020
我觉得Redis官方文档所说的没什么问题。
只不过它不支持roll back罢了,但是这不影响事务是atomic的。
harrymelon commentedon Apr 8, 2021
如果不能保持原子性,那使用事务的意义是什么呢?
我们不就是为了让他全部执行、或者全部不执行嘛?
我不是很理解这个点。
biggerboy commentedon Sep 13, 2022
根据原子性的定义(事务的原子性确保动作要么全部完成,要么完全不起作用)来看,Redis的事务是不支持原子性的,因为存在部分成功部分失败的情况,所以Redis的事务和传统意义上的事务是不一样的,或者说严格意义上不能称之为事务
wuhunyu commentedon Sep 23, 2022
维基百科是这么描述ACID的
redis说原子性是一组命令要么全部执行,要么全部不执行,倒是满足原子性的。但一致性是不满足的呀,一旦出现某一个命令执行失败了,其他的命令却还是正常执行,这就不能算是从一个合理的状态变换到另一个合理状态了
Pa1etteZ commentedon May 10, 2024
原子性有两个概念:在数据库中,事务的ACID中原子性指的是"要么都执行要么都回滚"。在并发编程中,原子性指的是"操作不可拆分、不被中断"。Redis既是一个数据库,又是一个支持并发编程的系统,所以他需要考虑到这两种原子性。Redis事务因为不支持回滚,所以很明显是不支持第一种原子性,而是支持第二种原子性的。
Snailclimb commentedon May 10, 2024
还能这么理解,第一次get到,学到了。