Redis 怎么实现分布式锁?

redis 2022年12月27日 449

简单方案:

最简单的方法是使用 setnx 命令。释放锁的最简单方式是执行 del 指令。

问题:

锁超时:如果一个得到锁的线程在执行任务的过程中挂掉,来不及显式地释放锁,这块资源将会永远被锁住(死锁),别的线程再也别想进来。

优化方案:

setnx 没办法设置超时时间,如果利用 expire 来设置超时时间,那么这两步操作不是原子性操作。

利用 set 指令增加了可选参数方式来替代 setnx。set 指令可以设置超时时间。

上面知识一个简单的回答,如果想更详细的深入回答这个问题。

建议看:Java后端核心知识总结:Redis篇

业务超时问题,我们可以使用Redission,其中的看门狗能够给我们的锁续命。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout 来另行指定。


关注微信公众号『PHP学习网

第一时间了解最新网络动态
关注博主不迷路~

PHP学习网:站内收集的部分资源来源于网络,若侵犯了您的合法权益,请联系我们删除!
分享到:
赞(0)

文章评论

您需要之后才可以评论

PHP学习网

PHP学习网