使用Redis自带数据结构实现分布式锁和 Redisson 分布式锁
SET NX EX
redis自带的数据结构 set 可以实现简易的分布式锁。但有如下几个缺陷:
1、无法实现可重试。当线程无法获取锁时就立即返回,不会重试。
2、无法实现可重入。
3、无法超时续约。只能通过 EX 设置获取锁后自动过期时间,但这并不安全,当某个业务执行的时间较长时,如果锁自动释放了,存在安全隐患。
Redisson 如何解决这些缺陷的?
- 可重入:利用 hash 结构记录锁标识和重试次数。
- 可重试:利用
发布/订阅
机制实现等待、唤醒,锁的重试。 - 超时续约:利用 watchDog,当锁还被线程占用时,自动更新锁时间以此避免自动释放锁。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1216271933@qq.com