我正在尝试使用Redis在C#中编写生产者/消费者系统。每个消息只能由一个消费者消费,并且我希望消费者等待其他消费者创建的元素。我的系统必须支持许多生产/消费者集。
我正在使用StackExchange.Redis
与Redis进行通信,使用列表(lists)来添加元素使用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
的结果。
async + john request <--> response
。这是一个可行的解决方案吗? - Royi Namir