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