【发布时间】:2021-01-20 10:25:15
【问题描述】:
我正在将 StackExchange.Redis 与配置为使用 Sentinel 的副本集群(3 个节点)一起使用。
我收到多个尝试使用相同数据更新缓存的请求,因此为避免多次写入,我在StringSetAsync 中使用When.NotExists。我的理解是,如果密钥已经存在,这将阻止集合发生。我希望 StringSetAsync 仅在集合实际发生的情况下返回 true。
例子:
var inserted = await connectionMultiplexer.GetDatabase().StringSetAsync("my-key", "my-value", myTimeout, When.NotExists);
if(inserted == false)
{
var keyExists = await connectionMultiplexer.GetDatabase().KeyExistsAsync("my-key");
if(keyExists == false)
{
// I end up here, which I assumed should not happen.
}
}
令我惊讶的是,我看到 StringSetAsync 会返回 false,即使根据我手动检查密钥是否存在的健全性检查,密钥不存在。
注意事项: 我的环境使用 2 个副本节点和一个主节点。 StackExchange.Redis 版本:2.1.58
【问题讨论】:
-
您在单节点集群中看到相同的行为吗?
-
你检查redis集群是否启动了?
标签: c# redis stackexchange.redis sentinel redis-sentinel