分布式锁-redis

分布式锁的使用场景:

比如公司为了实现服务一直可用,会部署多个实例,这样就可以一台一台机器的这样部署,其中一台部署着,另外一台还在运行,那么服务就是可用的,不会说一直处于服务不可用的状态。当处于这样场景的时候,如果你服务中有个定时任务的话,那么到点的时候,会触发多个实例的定时任务,也就是同一个时刻会执行多次定时任务里面的逻辑。如果任务的逻辑是不允许重复执行,那么这个时候就要加分布式锁,就是其中一台机器拿到处理的锁后,其他机器拿不到,就不进入逻辑处理的部分。

在redis中,实现分布锁的指令为: 

SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写,不存在就set,同时返回true,存在的话就直接返回false。那么这样就可以实现只用一台机器拿到锁的逻辑。

 

主机x 执行 setnx  比如: setnx  lock  "true",返回true,进入定时任务的处理逻辑

主机y就无法设置成功,直接返回false, 那么不进入处理逻辑

处理逻辑

主机x执行del操作,完成处理逻辑

很明显这里可以会出现死锁的问题,就是当处理逻辑出现异常(同时没有做try...catch处理的时候),或者当处理逻辑在处理的时候,因为新上线的代码要部署时,刚好部署到定时任务的代码的服务,那么就会出现del操作不成功的情况。

 

主机x 执行 setnx  比如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值