问题标签 [redlock.net]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
redis - Redlock.net 无法获取锁
使用:
此代码在 250-600 毫秒后总是返回false:
我正在努力找出原因,因为我可以使用StackExchange.Redis
connection string在 Redis 中缓存内容localhost,allowAdmin=true
。
在Redis
控制台中,我可以看到正在连接一个客户端,但仅此而已。
我为端口 6379 添加了防火墙规则,但没有任何改变。
永远无法获得关于我的锁的任何想法?
azure-storage - Azure Web Jobs Redis (RedLock) 和 Blob 存储访问问题
我们切换到 WebJobs,我们的后台任务在新项目进入 Azure 队列时开始工作。现在我们有一些奇怪的问题,他似乎在访问 Redis RedLock 和 Storage 时遇到了我无法解释的问题。
现在我们遇到的最大问题是RedLock。我们正在使用 RedLock.Net 进行分布式锁定。现在这在我们的生产 Web 应用程序中一切正常,它也适用于我们拥有的后台工作人员,但是一旦我们切换到 WebJobs,他基本上无法获得锁。用一些代码来支持这一点......我们像这样锁定:
这里的问题是,IsAcquired 在 Webjob 中总是错误的,我不知道为什么!?
可能与此问题有关的第二件事是删除 azure 存储中的 blob 文件,该文件仅在 WebJob 中出现 404 失败。
这将失败并在 WebJob 中出现 404 Not found 异常。
有什么我错过了设置 webjob 的吗?这可能是写操作的访问问题吗?很高兴有任何帮助!
java - 从 CLI 解锁 Redis 锁
我有一个 java 应用程序,它在本地网络上有多个实例。它使用 Redis Redlock 来管理共享数据库的完整性。这里的问题是这个java应用程序仍然非常不稳定,所以它崩溃了很多次。当一个实例崩溃并且它在崩溃时持有锁时,所有其他实例都会卡住。我的问题是,当持有锁的 Java 应用程序实例崩溃时,我可以从 Redis CLI 释放锁吗?
ruby-on-rails - 使用什么更好的redis锁定机制来避免rails中的异步验证失败?
我遇到了一个问题,其中在我们的一个模型中异步保存在应用程序级别声明的唯一性验证没有被所述验证阻止。由于我的应用程序上有一个可切换选项来启用/禁用唯一性验证,因此在数据库级别添加验证对我来说不是一个选项。
在搜索时,我发现 Redis 锁最适合这种情况,但是由于我对“Redis 锁”这个术语不熟悉,所以我需要一些关于哪个插件/实现更好地实现我需要的行为的建议。
我在这里看到了一个可能与我的问题类似的响应Ruby - Redis based mutex with expire implementation,它说不需要插件,因为它可以像这样单独使用 Redis 来实现
而且我还看到有人推荐这个 redlock 插件在这里找到https://github.com/leandromoreira/redlock-rb但可能是一个矫枉过正。
提前致谢
azure - Redis 锁是否应该在单独的实例上运行?
我们正在使用:
- Azure 上的标准 Redis
- StackExchange.Redis
- 红锁网
根据 Cloudflare 的数据,我们的网站在过去一两年中显着增长,现在每月服务约 250,000,000 个未缓存的请求。
偶尔,我们会看到数百个与 RedLock 由于处于Conflicted
状态而无法获取锁有关的异常。
我们的 Redis 缓存通常:
- 以 10% 的服务器负载运行(我相信这是关于 CPU)
- 但运行时内存使用率接近 100%
我的问题是:
- 是否推荐使用完全不同的 Redis 服务器进行锁定?
- 创建锁时,在 Redis 服务器中使用 100% 内存会导致问题吗?
azure - Redis 错误的爆发
我们最近创建了一个Standard 1 GB
专门用于分布式锁定的新 Azure Redis 缓存 - 与我们的主 Redis 缓存分开。这样做是为了提高我们主要 Redis 缓存的稳定性,这是一个非常长期的问题,此操作似乎对解决有很大帮助。
在我们的新缓存上,我们每隔 1 到 3 天会在相同的几秒钟内观察到大约 100 个错误。错误是:
No connection is available to service this operation
(StackExchange.Redis 错误)
或者:
Could not acquire distributed lock: Conflicted
(RedLock.net 错误)
由于它们是来自不同包的错误,我怀疑 Redis 缓存本身就是这里的问题。在此期间,没有任何统计数据看起来异常,工作负载应该适合标准 1GB 大小。
我猜这可能是由广告宣传的Low
网络性能引起的,这可能是原因吗?
c# - 使用 redis-ha 集群进行 Redlock
我一直在尝试针对 helm chart 中安装在 kubernetes 中的 redis 集群配置分布式 RedLock stable/redis-ha
。理想情况下,我希望集群具有多个副本(主/辅助复制)。
我正在遵循使用 StackExchangeRedis 和 Redlock.Net 进行设置的标准示例
我看到的行为是锁通常永远不会被获取,即使在单个用户环境中也是如此。状态为 NoQuorum,表示 RedLock .Net 无法获得多数,但在我当前的测试集群中,我只有一个副本。我已经能够让它工作几次,但它通常是片状的并且随机停止工作。
我已经找到关于锁定集群的这一部分https://github.com/samcook/RedLock.net
基本上我的理解是有基本的支持,但是你必须直接连接到集群中的所有副本。
以前有没有人成功配置过针对集群的分布式锁定?
c# - 分布式锁不适用于 RedLock.net
我想使用 Redis 进行分布式锁。我为此使用RedLock.net nuget 包。但是线程能够获得锁,甚至另一个线程已经获得了锁。
这是示例代码:
这是我的演示的输出
如您所见,每个线程都能够获得锁,这是不应该发生的。
一旦获得锁,那么其他线程不应该能够获得锁。
c# - 模拟 Redlock.CreateAsync 不返回模拟对象
我正在尝试模拟 Redlock
我有下面的测试
MockRedlock
是一个实现 IRedLock 的简单模拟类
await sut.Handle(data);
是对单独事件类的调用
我在下面展示了这个。这已经被简化了,但是使用下面的代码和上面的测试可以重现空引用错误
当我尝试调用它时,我希望我的对象被返回,但我得到了 null
线上if (!redlock.IsAcquired)
redLock
为空
什么不见了?
redlock.net - 如何为 RedLockFactory.CreateLockAsync() 方法的 expiryTime 参数选择正确的值?
我正在使用 RedLock.net 库进行资源锁定。为了锁定资源,我使用 RedLockFactory.CreateLockAsync。
我了解此方法将尝试waitTime
通过不断重试每个retryTime
. 但是我不明白什么是正确的价值expiryTime
。一旦获得了锁,它将一直保留到锁为Dispose
d 为止,这与expiryTime
. 换句话说,即使expirtyTime
设置为 5 秒,如果锁仅在 10 秒后被释放,那么锁将保持 10 秒。
在许多示例中,使用 30 的值没有说明。
我已经用 0 的值进行了测试。根本没有获得锁。
我已经用 5 毫秒的值进行了测试。获取并保留锁直到被释放。
那么如何为expiryTime
参数选择合适的值呢?在我看来,这个参数是不必要的,任何非零正值都可以。