码迷,mamicode.com
首页 > 其他好文 > 详细

分布式锁

时间:2019-09-15 14:11:18      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:setnx   信息   分布式   行操作   情况   顺序   用户   运维   出现   

分布式锁

多个系统要对一个key进行操作,最后操作key的顺序和预期的顺序不一致,此时就用分布式锁对一个目标加锁,使其他进程无法争到已经被占用的锁。

基本指令

加锁指令:setnx lock 目标 true

移除锁指令:del lock 目标

但是如果在加锁后执行出现异常终止导致没有移除锁,就会导致死锁,所以要给锁加一个自动释放时间:

expire lock 目标 5(5秒过期)

redis还提供了setnx和expire组合的原子指令,大大降低了风险:

set lock 目标 true ex 5 nx

加锁失败

加锁失败时可以直接抛出异常,提醒用户重试,或者sleep一会,但是信息多时不合适,也可以把任务放在延时队列中处理。

集群中分布式锁的风险

在集群中分布式锁可能有风险,当一个客户端在主节点申请了一把锁,然后主节点突然挂掉,从节点变为主节点,当锁信息还没有同步过去的时候,新的请求就有可能在新主节点加锁成功,出现两个客户端占用同一把锁的情况。此时可以使用redlock算法,但是它会让性能下降,运维负担加重。

分布式锁

标签:setnx   信息   分布式   行操作   情况   顺序   用户   运维   出现   

原文地址:https://www.cnblogs.com/shizhuoping/p/11522118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!