每个发布/订阅订阅是否都需要Redis ConnectionMultiplexer?

时间:2019-01-20 20:32:35

标签: asp.net-core-webapi publish-subscribe stackexchange.redis

我有一个.Net Core Web Api设置,其中暴露了一个基本上是永久帧的终结点。我受到API合约的约束,该合约迫使我将其公开。

永远帧推送从Redis发布/订阅通道接收的数据。我将在此终结点上有多个侦听器,它们基本上应该是同一频道的单独订阅者。

我使用StackExchange.Redis。

有一件事我无法解决,那就是在这种情况下如何使用ConnectionMultiplexer。我到处都知道有一个全局ConnectionMultiplexer。但是,如果这样做,当有人离开并关闭他们都在收听的频道的订阅时,我是否会取消订阅所有订阅者?

如果我不这样做,我肯定会遇到内存泄漏。

全局ConnectionMultiplexer使与Redis的连接数保持最少,但我看不出有什么办法可以避免这种情况。

我有误会吗?

1 个答案:

答案 0 :(得分:0)

始终使用相同的ConnectionMultiplexer实例,否则您将失去使用多路复用器的好处。

在频道上调用取消订阅导致所有订阅者也都取消订阅时,我遇到了类似的问题。

如果您查看ISubscriber界面,有两种订阅频道的方法:

void Subscribe(RedisChannel channel, Action<RedisChannel, RedisValue> handler, CommandFlags flags = CommandFlags.None);
ChannelMessageQueue Subscribe(RedisChannel channel, CommandFlags flags = CommandFlags.None);

我拿了第二个,它解决了我的问题。