gpt4 book ai didi

c# - StackExchange.Redis ListRightPop 不等待结果

转载 作者:IT王子 更新时间:2023-10-29 06:03:16 27 4
gpt4 key购买 nike

我正在尝试使用 C# 中的 Redis 编写生产者/消费者系统。产生的每条消息只能由一个消费者使用,我希望消费者等待消费者创建的元素。我的系统必须支持许多生产者/消费者集。

我正在使用 StackExchange.Redis 与 Redis 通信,并使用列表,其中使用 ListLeftPush 添加元素并使用 ListRightPop 删除元素。我遇到的是,虽然 ListRightPop 方法应该阻塞,直到列表中存在一个元素(或在定义的超时之后),但如果列表中没有元素,它总是自动返回。这是我写的测试代码来检查这个:

IDatabase cache = connection.GetDatabase();        
Trace.TraceInformation("waiting "+DateTime.Now);
var res = cache.ListRightPop("test");
Trace.TraceInformation("Got "+res+", Ended" + DateTime.Now);

我在不到 1 秒后得到了一个 nil 结果。

最佳答案

标准弹出操作不会阻塞:如果列表为空或不存在,它们会返回 nil。

SE.Redis 是一个多路复用器。使用阻塞 pop 是一个非常非常糟糕的主意。在文档中对此进行了更多解释,并专门讨论了用于阻止 pops 的解决方法:https://stackexchange.github.io/StackExchange.Redis/PipelinesMultiplexers

关于c# - StackExchange.Redis ListRightPop 不等待结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com