我正在尝试在 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);
nil
不到 1 秒我就得到了结果。