c# - Redlock 与 redis-ha 集群

标签 c# redis stackexchange.redis redis-cluster redlock.net

我一直在尝试针对安装在 kubernetes 中的 redis 集群从 helm chart stable/redis-ha 配置分布式 RedLock。 .理想情况下,我希望集群具有多个副本(主/辅助复制)。
我正在遵循使用 StackExchangeRedis 和 Redlock.Net 进行设置的标准示例

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");

var multiplexers = new List<RedLockMultiplexer>
{
    redis
};

var redlockFactory = RedLockFactory.Create(multiplexers);

var resource = "the-thing-we-are-locking-on";
var expiry = TimeSpan.FromSeconds(30);

using (var redLock = await redlockFactory.CreateLockAsync(resource, expiry))
{
    //This is almost always false and the lock status is NoQuorum
    if (redLock.IsAcquired)
    {
        
    }
    
}
我看到的行为是,即使在单个用户环境中,通常也不会获得锁。状态为 NoQuorum,这表明 RedLock .Net 无法获得多数,但在我当前的测试集群中,我只有一个副本。我已经能够让它工作几次,但它通常是片状的并且随机停止工作。
我已经找到关于锁定集群的这一节 https://github.com/samcook/RedLock.net
基本上我的理解是有基本的支持,但是你必须直接连接到集群中的所有副本。
之前有没有人成功配置过针对集群的分布式锁定?

最佳答案

我曾与 Polly 人合作过他们的重复请求折叠器 ( https://github.com/Polly-Contrib/Polly.Contrib.DuplicateRequestCollapser )。我还使用 redis ( https://github.com/Polly-Contrib/Polly.Contrib.DuplicateRequestCollapser.RedisDistributedLock ) 制作了一个分布式锁版本。
我对 redis 集群不太熟悉,但是如果它们涉及某种分片,则需要在继续操作之前获取集群的每个分片上的分布式锁。
这两个都应该有nuget包。让我知道这是否有帮助。

关于c# - Redlock 与 redis-ha 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62602686/

相关文章:

node.js - 自主维护可用工作人员状态的最佳方法是什么

Node.js 和 Redis;等待循环完成

Azure Redis 集群关键事件失效事件

c# - 使用 StackExchange.Redis 的线程安全递增/递减

c# - 如何使用 StackExchange.Redis 解决客户端的 Redis 超时问题?

c# - 如何进行单元测试以测试检查请求 header 的方法?

c# - 将 aspx url 路由到 MVC Controller

C# Azure Functions 和 Application Insights - LogError 未显示异常

c# - 包括不使用 Entity Framework 查询

node.js - 为什么使用 Redis 而不是存储在普通变量中?