【问题标题】:Why we need distributed lock in the Redis为什么我们需要在 Redis 中使用分布式锁
【发布时间】:2016-09-30 21:09:36
【问题描述】:

对不起,我是分布式锁和 Redis 的新手,我听说 Redis 是一个单线程服务器。所以我的问题是为什么 Redis 需要distributed lock management?例如,第二个线程(客户端 B 发起)不会中断前一个线程,直到第一个线程(客户端 A 发起)的操作完成。甚至两个线程都在处理相同的数据。我知道我一定错过了什么。请帮助纠正我。谢谢。

【问题讨论】:

    标签: java multithreading redis locking distributed


    【解决方案1】:

    我认为分布式锁与 Redis 本身无关(您不应该真正关心它是否是单线程的),而是与您的应用程序有关。

    很清楚“常规”(非分布式)锁的作用,但它适用于单个 JVM 中的多线程应用程序。

    “分布式”一词增加了一种跨多个 JVM 同步对某些资源的访问的方法,这样只有一个 JVM 将执行临界区。

    现在,正如您参考的文章中所述,可以使用“SET”命令实现锁定,但这种实现的根本问题是 Redis 本身的单点故障,这就是他们谈论的原因Redlock算法,支持根据多个独立Redis机器的状态获取锁。请注意,在任何情况下,我们并不真正关心 Redis 本身是单线程还是多线程。

    【讨论】:

    • 啊...正如文章所说。 Distributed locks are a very useful primitive in many environments where different processes must operate with shared resources in a mutually exclusive way. 。它确实提到了 Multiple processes 。不仅仅是Multiple threads
    • 没错。以下是您需要 DL 的示例:假设您有一些分析数据库。假设您想创建一个与该数据库一起使用的报告,并且您知道如果 2 个用户尝试同时创建一个报告,就会发生不好的事情。现在,由于您的应用程序在集群中运行,因此您需要保证一次只创建一个报告,无论在哪台机器上(您保护数据库)。所以分布式锁可以在这里提供帮助。
    • Correct implementation with a single instance 部分中的单实例是什么意思?这是否意味着Master-slave 故障转移模式?谢谢。
    • 我猜,单实例意味着你只有一个redis服务器。我不认为它是关于主从的,因为在任何情况下你都只与主人一起工作,并且奴隶与主人同步。但是如果是这样的话,当master宕机时,它可能会搞砸日志,因此有一个Redlock算法
    猜你喜欢
    • 2016-01-14
    • 2012-08-13
    • 2023-04-05
    • 2019-12-17
    • 2015-09-15
    • 2019-06-09
    • 2011-07-05
    • 2016-02-01
    • 2012-05-15
    相关资源
    最近更新 更多