编辑
2026-01-09
redis
00

redis实现的分布式锁:

  • 使用setnx命令时,需要设置 ttl,防止系统故障导致锁无法释放。
  • 自己实现的分布式锁的缺陷:我们并不知道准确的业务执行时间,因此这个过期时间不好控制。
  • 不可重入

因此我们使用第三方工具redisson:

  • 提供看门狗(WatchDog),一个线程获取锁成功之后,WatchDog会给持有锁的线程续期(默认每隔10s续期)
  • 可重入,底层采用了一个hash结构,用线程id和该锁锁的次数作为依据,如果发现锁已经被获取了,但是是当前线程获取的,我们就可以再次获得锁,并把次数加1。如果发现这个线程id不是自己的,则无法获取锁。释放锁的时候让次数减1即可。
  • 不能做到主从的强一致性,如果需要,可以使用zookeeper实现的分布式锁。
  • 底层还是setnx和lua
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay