redis事务开启加监听key(redis版本>=2.2.0)

1,开启监听 watch,watch要求在事务前开启 负责会报错。

=》 不允许在multi内监视错误

2.开启事务multi ,后续的一系列操作会被redis存储在队列中,但不会对redis的数据进行实际操作。

3.对redis的一系列操作,后我们需要根据实际情况判断事务开启都的操作是否提交

exec提交,discard清楚存储的操作。前面两种情况都会有关闭监听的效果所有我们不需要使用unwatch来关闭监听。


思路:即开始对redis数据进行操作之前我们需要先监听她,当两个用户同时访问并操作她的数据时,第一个人最先进入并执行了监听这个key的操作,第二个进来的人在前面的人进行操作完成并提交事务(同时关闭监听)之前,无法对数据进行操作。事务的开启就是为了批量操作redis的期间,阻止第二个人在次时对redis数据进行操作从而产生脏数据。比如秒抢等业务


下面来解释上述命令的官方解释:

watch :  

              监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

unwatch:

              取消 WATCH 命令对所有 key 的监视。

              如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了。

因为 EXEC 命令会执行事务,因此 WATCH 命令的效果已经产生了;而 DISCARD 命令在取消事务的同时也会取消所有对 key 的监视,因此这两个命令执行之后,就没有必要执行 UNWATCH 了。

multi:

          标记一个事务块的开始。

          事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

exec: 

          执行所有事务块内的命令。

         假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。

discard: 

           取消事务,放弃执行事务块内的所有命令。

          如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值