说说setnx实现的分布式锁吧
一开始采用Redis的setnx命令实现分布式锁,set成功就获取锁成功,失败就没获取锁。结合ex过期时间防止死锁。我们的命令是这样的: set lock 1 ex 10 nx。
存在问题 误删别人的锁
于是我们在锁中加入了线程标识(uuid)
存在问题 拿锁比锁删锁的操作不是原子性的
于是我们采用lua脚本进行改进
存在问题 锁续期
于是我们采用了redisson分布式锁,可重入,可重试,采用看门狗机制续期(如果一个拿到锁的线程没有完成逻辑,看门狗会帮助线程不断延长锁的超时时间)#八股#
存在问题 误删别人的锁
于是我们在锁中加入了线程标识(uuid)
存在问题 拿锁比锁删锁的操作不是原子性的
于是我们采用lua脚本进行改进
存在问题 锁续期
于是我们采用了redisson分布式锁,可重入,可重试,采用看门狗机制续期(如果一个拿到锁的线程没有完成逻辑,看门狗会帮助线程不断延长锁的超时时间)#八股#