Skip to content

redis的事务

一、redis事务介绍

redis通过multil、exec、watch等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、顺序地执行多个命令的机制,并且再事务执行期间,服务器不会中断事务而改去执行其它客户端的命令,他会将事务中的所有命令执行完毕以后,才去处理其它客户端请求。即在执行事务的时候,其服务端不处理其它的命令请求,阻塞状态。

redis事务阶段:

  1. 事务开始:multil命令可以将执行该命令的客户端从非事务状态切换成事务状态。
  2. 事务入队:当客户端属于事务状态时,这个客户端发来的命令会被进入到事务队列当中,队列是一个先进先出(FIFO)的队列
  3. 事务执行:服务器从事务队列以此取出命令执行,最终返回这四个结果回客户端

值得一提的是,redis的事务并不支持回滚的操作,如果redis在执行事务中的命令过程当中有命令执行失败,后面的命令也会继续往下执行。

二、redis的乐观锁

WATCH命令是redis的一个乐观锁,它可以在EXEC命令执行之前,监视任意数量的数据库键,并且在EXEC执行的时候,如果监视的键至少有一个被修改过了,数据库则拒绝执行事务,并且返回给客户端一个空回复。