NoSql的key-value为什么不支持事务的回滚,Redis呢?

刚才在学习NoSql的五种数据类型的时候,看到key-value类型不适合需要事务的数据库操作,因为key-value不支持事务的回滚。我就出现疑问了,这篇文章是对问题的解决和扩展。

参考:https://blog.csdn.net/Thinking_Mind/article/details/79657671

问题

Redis是如今高并发项目中特别受欢迎的一个Key-value类型数据库,回滚是事务一个特别重要的特性,那么Redis为什么不支持事务的回滚?

原因

在事务运行期间,虽然Redis命令可能会执行失败,但是Redis仍然会执行事务中余下的其他命令,而不会执行回滚操作。
也就是说,只有当被调用的Redis命令有语法错误时,这条命令才会执行失败(在将这个命令放入事务队列期间,Redis能够发现此类问题),或者对某个键执行不符合其数据类型的操作。

扩展

实际上,这就意味着只有程序错误才会导致Redis命令执行失败,这种错误很有可能在程序开发期间发现,一般很少在生产环境发现。 Redis已经在系统内部进行功能简化,这样可以确保更快的运行速度,因此Redis不需要事务回滚的能力。

对于Redis事务的这种行为,有一个普遍的反对观点,那就是程序有可能会有缺陷(bug)。但是,事务回滚并不能解决任何程序错误。例如,如果某个查询会将一个键的值递增2,而不是1,或者递增错误的键,那么事务回滚机制是没有办法解决这些程序问题的。

猜你喜欢

转载自blog.csdn.net/weixin_42636552/article/details/82779421
今日推荐