Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
订阅频道时StackExchange.Redis客户端是否受到限制?_Redis_Publish Subscribe_Stackexchange.redis - Fatal编程技术网

订阅频道时StackExchange.Redis客户端是否受到限制?

订阅频道时StackExchange.Redis客户端是否受到限制?,redis,publish-subscribe,stackexchange.redis,Redis,Publish Subscribe,Stackexchange.redis,我想使用StackExchange.Redis开发一个发布/订阅消息队列 在StackExchange.Redis文档中指定: -数据不通过发布/订阅发送;发布/订阅API仅用于通知工人检查更多工作 因此,我理解,一旦订阅的工作人员通过发布/订阅检测到通知,我可能需要使用其他redis操作(如LPOP)来检查工作 但是,Redis参考文件规定: 一旦客户端进入订阅状态,它就不应该 发出除附加SUBSCRIBE、PSUSCRIBE、, 取消订阅和取消订阅命令 使用StackExchange.Red

我想使用StackExchange.Redis开发一个发布/订阅消息队列

在StackExchange.Redis文档中指定:

-数据不通过发布/订阅发送;发布/订阅API仅用于通知工人检查更多工作

因此,我理解,一旦订阅的工作人员通过发布/订阅检测到通知,我可能需要使用其他redis操作(如LPOP)来检查工作

但是,Redis参考文件规定:

一旦客户端进入订阅状态,它就不应该 发出除附加SUBSCRIBE、PSUSCRIBE、, 取消订阅和取消订阅命令

使用StackExchange.Redis,我应该在订阅处理程序中创建另一个多路复用器来发出LPOP之类的命令吗

是否可以为Subscribe和其他命令共享同一个多路复用器


当我的员工收到检查工作的通知时,是否应该取消订阅?

您是否尝试使用共享多路复用器

不,只使用一个ConnectionMultiplexer,订阅您想要的内容并使用它做其他事情绝对没有问题,就像Stackexchange一样。Redis客户端在幕后为您做所有事情。它实际上在内部处理订户的新连接

也就是说,不,您不必每次都创建一个新的多路复用器,也不必发出任何其他命令来使用订阅服务器

只需创建一个新订户

ISubscriber sub = redis.GetSubscriber();
然后订阅你想要的任何东西

sub.Subscribe("messages", (channel, message) => {
    Console.WriteLine((string)message);
});
或者发送消息

sub.Publish("messages", "hello");

正如在

中所解释的,我知道我可以使用一个多路复用器订阅多个通道,但是如果我想使用同一个ConnectionMultiplexer执行其他Redis操作,而不是处理程序中的Console.WriteLine呢?Redis docs声明我不应该这样做,因为处于订阅状态的客户端不应该发出更多命令。StackExchange.Redis是否免于此限制?我回答得不够清楚吗?你可以用一个多路复用器来处理任何事情,是的。你不必再创建一个。。。到目前为止你都试过了吗?