为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis也不例外。Redis的事务使用非常简单,不同于关系数据库,我们无需理解那么多复杂的事务模型了,就可以直接使用。不过也正是因为这种简单性,它的事务模型很不严格,这要求我们不能像使用关系数据库的事务一样使用Redis。
Redis事务的基本使用
每个事务的操作都有begin、commit、和rollback、begin指示事务的开始,commit指示事务的提交,rollback指示事务的回滚。
Redis与其差不多,对应的分别是multi/exec/discard。multi指示事务的开始,exec指示事务的执行,discard指示事务的丢弃。
1 | >multi |
上面的指令演示了一个完整的事务过程,所有的指令在exec之前不执行,而是缓存在服务器的一个事务队列中,服务器一旦受到exec指令,就开始执行整个事务队列,执行完毕后一次性返回所有指令的运行结果。因为Redis的单线程特性,它不用担心自己在执行队列的时候被其他指令打搅,可以保证他们得到的[原子性]执行。
上图显示了以上事务过程完整的交互结果。QUEUED是一个简单字符串,同OK是一个形式,它表示指令已经被服务器缓存到队列里了。