命令解析Redis中Watch命令的功能(redis的watch)
Redis中的Watch命令通常被用于处理MVCC(多版本控制)问题,可以有效的避免客户端的多个操作同时在执行。它的 功能是读入一组key,并将状态标记为监视,而在提交事务之前,所有被监视的key的值 必须没有改变,如果有改变,则放弃执行。
WATCH 是redis中为了避免多线并发所提供的一项实用服务,可以使一组操作一起成功,也可以使一组操作失败。WATCH 命令的原理就是当客户端发送WATCH命令的时候,服务器会根据客户端传入的参数(一组key)将这些key都涂红,接下来的一段时间内,如果这些key的值发生变化,则事务失败,此时客户端接收到的结果为空,否则事务继续执行。要想更好的理解WATCH命令,下面我们给出一个实例来阐述其操作过程:
在业务部门1中:
1.调用WATCH命令(keys:a,b,c),将要执行的数据keys a,b,c 加入了监视队列。
客户端执行:watch key1 key2 key3
2.执行服务器上的set操作改变监视值,由于keys a,b,c中任意一个已经被改变,服务器上的set操作被终止,此时客户端收到一个空值,表示整个事务的结果为失败。
3.UNWATCH命令,清除当前客户端的所有监视key。
客户端执行:unwatch
从上面的描述中我们可以看出,当客户端发出WATCH命令之后,服务器就将KEY值加入到了监视队列,客户端在发出set命令后,如果队列中的key值在事务之前发生变化,则会放弃本次执行,最后客户端提交UNWATCH命令解除监控,维持原有状态。