【问题标题】:Do I need a Redis ConnectionMultiplexer for each pub/sub subscription?每个发布/订阅订阅都需要 Redis ConnectionMultiplexer 吗?
【发布时间】:2019-01-20 20:32:35
【问题描述】:

我有一个 .Net Core Web Api 设置,我在其中公开了一个基本上是永久框架的端点。我受到 API 合同的约束,迫使我将其公开。

永久帧推送从 Redis 发布/订阅通道接收到的数据。我将在这个端点上有多个监听器,它们基本上应该是同一频道的单个订阅者。

我使用 StackExchange.Redis。

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

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

全局 ConnectionMultiplexer 将与 Redis 的连接数保持在最低限度,但我看不出有任何方法可以避免它。

我有什么误解吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果你看一下 ISubscriber 界面,订阅频道有两种方式:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多