Redis事务同传统关系数据库事务不相同。关系数据库,首先向数据库发送事务开始BEGIN,然后执行读写操作,最后发送COMMIT提交事务,或者通过ROLLBACK回滚放弃事务的修改。

Redis事务以命令MULTI开始,然后传入多个命令,最后以EXEC命令结束。此外,为了达到关系数据库的ROLLBACK效果, 还要配合WATCH命令(有时还会用到UNWATCH和DISCARD命令)。

  • WATCH观察key是否被改动
  • 如果提交时key被改动,EXEC命令将返回null,表示事务失败

如果在事务中,执行用户余额增减变动,类似执行:

WATCH key

$money = GET key

$money += 1

MULTI

SET key $money

EXEC