Redis事务的实现原理
Redis通过 MULTI 、 EXEC 、 WATCH 、 DISCARD 等命令来实现事务功能。主要有以下三个阶段: 事务开始 MULTI 命令的执行,标识着一个事务的开始。 MULTI 命令会将客户端状态的 flags 属性中打开 REDIS_MULTI 标识来完成的。 命令入队 当一个客户端切换到事务状态之后,服务器会根据这个客户端发送来的命令来执行不同的操作。如果客户端发送的命令为 MULTI 、 EXEC 、 WATCH 、 DISCARD 中的一个,立即执行这个命令,否则将命令放入一个事务队列里面,然后向客户端返回 QUEUED 回复 Redis客户端拥有自己的事务状态 typedef struct client { // ...... // 事务状态(MULTI或者EXEC) multiState mstate; // ...... } client; 事务状态包含一个事务队列 typedef struct multiState { // 事务队列,FIFO multiCmd *commands; // 已入队命令计数 int count; // ...... } multiState; 事务队列中multiCmd类型保存了一个已入队命令的相关信息 typedef struct multiCmd { // 参数 robj **argv; // 参数数量 int