事务处理

Redis 的事务处理比较简单。

只能保证 client 发起的事务中的命令可以连续的执行,而且不会插入其它的 client 命令,当一个 client 在连接中发出 multi 命令时,这个连接就进入一个事务的上下文,该连接后续的命令不会执行,而是存放到一个队列中,当执行 exec 命令时,redis 会顺序的执行队列中的所有命令。

10.24.8.1:6379> multi
OK

10.24.8.1:6379> set name a  <transaction>
QUEUED

10.24.8.1:6379> set name b  <transaction>
QUEUED

10.24.8.1:6379> exec        <transaction>
1) "OK"
2) "OK"

10.24.8.1:6379> get name
"b"

需要注意的是,redis 对于事务的处理方式比较特殊,它不会在事务过程中出错时恢复到之前的状态,这在实际应用中导致我们不能依赖 redis 的事务来保证数据一致性。