Redis通过MULTI、EXEC、WATCH等命令来实现事务
MULTI //事务开始
SET "name" "test" //do something
...
EXEC //提交事务
WATCH "name" //WATCH监视
DISCARD //丢弃事务
WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为。
官方文档对事务的定义:
官方认为Redis事务是一个原子操作,这是站在执行与否的角度考虑的。但是从ACID原子性定义来看,严格意义上讲Redis事务是非原子型的,因为在命令顺序执行过程中,一旦发生命令执行错误Redis是不会停止执行然后回滚数据。
以下是这种做法的优点:
对于官方的这种理由有一个普遍的反对观点:程序有bug怎么办?但其实回归不能解决程序的bug,比如某位粗心的程序员计划更新键A,实际上最后更新了键B,回滚机制是没法解决这种人为错误的。正因为这种人为的错误不太可能进入生产系统,所以官方在设计Redis时选用更加简单和快速的方法,没有实现回滚的机制。
参考:
《Redis开发与运维》
《Redis设计与实现》
https://mp.weixin.qq.com/s/GwjQalQ9ZkBbTBtEKpbkMw
原文:https://www.cnblogs.com/caozibiao/p/14214857.html