简介
MULTI、EXEC、DISCARD、WATCH是redis事务的基础。事务特征如下:
- redis事务允许将命令序列打包成一个原子操作,在执行事务的过程中不会被打断执行其他命令。
- 要么处理所有命令,要么都不处理。在
MULTI
阶段服务器收集命令序列,只有在调用EXEC
的时候事务的命令序列才会被执行。在使用AOF
时,如果事务未被完整的写入磁盘,redis-server
在重启时将会检测到这种错误从而退出并显示这种错误。使用redis-check-aof
工具进行修复删除不完整的事务,以便服务可以启动。 - 在
MULTI
收集命令期间,如果某个命令入队失败(例如语法错误),在redis 2.6.5
之前,将会在调用EXEC
时执行成功入队的命令子集作为事务;在redis 2.6.5
之后,服务器将拒绝执行该事务,在EXEC
时返回错误信息并自动丢弃该事务。 - 在
EXEC
执行期间,如果有命令执行失败,事务不会回滚,其他命令照常执行,完成后一次性返回各个命令的回复信息。
WATCH与乐观锁
在使用MULTI
收集命令前,使用WATCH
来缓存某些KEY
的值,在EXEC
时执行检查,如果监视的KEY
的值被修改了,事务将拒绝执行并返回nil
。
事务结束、客户端连接关闭将会自动的UNWATCH
,或者主动使用UNWATCH
来取消监视。
使用
WATCH key1 key2
MULTI
INCR key1
INCR key2
EXEC
网友评论