【问题标题】:Is Redisson getLock() Safe for Distributed Lock Usage?Redisson getLock() 对分布式锁的使用安全吗?
【发布时间】:2020-06-19 17:26:40
【问题描述】:

Redisson 的getLock() 方法是否适用于分布式用例,与getRedLock() 相比如何?

Redisson (3.11.x) 有几种方法来实例化锁:

getLock() 使用什么算法,分布式使用是否安全?documentation 表示:

实现了非公平锁定,因此不能保证线程的获取顺序。

我希望将 getLock()getRedLock() 进行比较,这似乎使用 Redlock 并记录在 Redis 的顶级 distlock 页面:https://redis.io/topics/distlock

本页试图提供一种更规范的算法来使用 Redis 实现分布式锁。我们提出了一种称为 Redlock 的算法,它实现了一种我们认为比普通单实例方法更安全的 DLM。

【问题讨论】:

    标签: java concurrency redis distributed-computing redisson


    【解决方案1】:

    Redisson 的 getLock() 方法是否适用于分布式用例,它与 getRedLock() 相比如何?

    所有 Redisson 锁都适合分布式用例。 RedLock 算法假设您对集群中的每个主节点都有锁。 RedLock 算法是命题,遗憾的是没有对其实践使用的反馈。除了它的分析https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html

    getLock() 使用什么算法,分布式使用是否安全?

    RLock 对象作为单个对象存储在 Redis 中。如果锁被释放,其他线程会通过 pubsub 监听器得到通知。还有 lockWatchdogTimeout 设置允许定义在当前线程不活动时强制释放锁的时间。

    更新 从 3.12.5 版本开始,getLock() 方法在故障转移期间返回具有更高可靠性的 Lock。 getRedLock() 已被弃用。

    【讨论】:

    • 感谢链接! @NikitaKoksharov,我知道您反驳了 Martin 的论点 (antirez.com/news/101);但我也注意到讨论已经 4 年了——RedLock 是否有任何改进可以缓解 Martin 的担忧?
    • @JJZabkar 我不知道。您可以改用 RLock 对象
    • @JJZabkar 我的答案已更新。由于这个任务已经完成github.com/redisson/redisson/issues/2669
    猜你喜欢
    • 2021-11-18
    • 2017-02-24
    • 1970-01-01
    • 2020-11-25
    • 2013-05-29
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多