如果你有使用关系数据库的经验,那么“redis在事务失败时不进行回滚,而是继续执行余下的命令”这种做法可能会让你觉得有些奇怪。
下面是这种做法的优点:
- redis命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或者是命令用在了错误类型的键上面。也就是说,失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中
- 因为不需要对回滚进行支持,所以redis的内部可以保持简单快速。
有种观点认为 Redis 处理事务的做法会产生 bug , 然而需要注意的是, 在通常情况下, 回滚并不能解决编程错误带来的问题。 举个例子, 如果你本来想通过 INCR key 命令将键的值加上 1 , 却不小心加上了 2 , 又或者对错误类型的键执行了 INCR key , 回滚是没有办法处理这些情况的。
鉴于没有任何机制能够避免程序员自己造成的错误,并且这类错误通常不会在生产环境中出现,所以redis选择了更简单、更快速的无回滚方式来处理事务