-
Notifications
You must be signed in to change notification settings - Fork 45.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于Redis事务不是原子性问题 #452
Comments
好的 感谢补充。我已经同步:https://github.com/Snailclimb/JavaGuide/blob/master/docs/database/Redis/Redis.md#redis-%E4%BA%8B%E5%8A%A1 |
|
1.若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行 |
我觉得Redis官方文档所说的没什么问题。
只不过它不支持roll back罢了,但是这不影响事务是atomic的。 |
如果不能保持原子性,那使用事务的意义是什么呢? |
根据原子性的定义(事务的原子性确保动作要么全部完成,要么完全不起作用)来看,Redis的事务是不支持原子性的,因为存在部分成功部分失败的情况,所以Redis的事务和传统意义上的事务是不一样的,或者说严格意义上不能称之为事务
|
维基百科是这么描述ACID的
redis说原子性是一组命令要么全部执行,要么全部不执行,倒是满足原子性的。但一致性是不满足的呀,一旦出现某一个命令执行失败了,其他的命令却还是正常执行,这就不能算是从一个合理的状态变换到另一个合理状态了 |
原子性有两个概念:在数据库中,事务的ACID中原子性指的是"要么都执行要么都回滚"。在并发编程中,原子性指的是"操作不可拆分、不被中断"。Redis既是一个数据库,又是一个支持并发编程的系统,所以他需要考虑到这两种原子性。Redis事务因为不支持回滚,所以很明显是不支持第一种原子性,而是支持第二种原子性的。 |
还能这么理解,第一次get到,学到了。 |
redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
The text was updated successfully, but these errors were encountered: