说说setnx实现的分布式锁吧

一开始采用Redis的setnx命令实现分布式锁,set成功就获取锁成功,失败就没获取锁。结合ex过期时间防止死锁。我们的命令是这样的: set lock 1 ex 10 nx。

存在问题 误删别人的锁

于是我们在锁中加入了线程标识(uuid)

存在问题 拿锁比锁删锁的操作不是原子性的

于是我们采用lua脚本进行改进

存在问题 锁续期

于是我们采用了redisson分布式锁,可重入,可重试,采用看门狗机制续期(如果一个拿到锁的线程没有完成逻辑,看门狗会帮助线程不断延长锁的超时时间)#八股#
全部评论

相关推荐

点赞 9 评论
分享
牛客网
牛客企业服务