Redis Pub Sub如何处理重复订阅?

t8e9dugd  于 2023-02-15  发布在  Redis
关注(0)|答案(1)|浏览(318)

我在复习一些旧代码。我们有一些缓存键,可以保存少量的二进制数据。
每当我们成功地检索到这些缓存项之一时,我们调用:

RedisController.GetConnection().GetSubscriber().SubscribeAsync(cacheKey, onMessageReceived);

其中通道名称是该高速缓存键的名称。

  • 每次获得该高速缓存键时 * 我们都调用此方法,这可能会连续调用数十次。

我的问题是订阅一个已经存在的频道是否有效,或者请求被廉价地忽略了?似乎没有任何方法可以做到沿着几点:

var subscriber = RedisController.GetConnection().GetSubscriber();
if(!subscriber.isSubscribed(cacheKey) {
    RedisController.GetConnection().GetSubscriber().SubscribeAsync(cacheKey, onMessageReceived);
}
eyh26e7m

eyh26e7m1#

在SE.Redis中,订阅一个现有的Redis频道会向底层Redis服务器拓扑重新发出SUBSCRIBE命令,并将消息处理程序添加到处理程序的内部列表中,该列表由库本身管理;然而,在Redis端,订阅现有频道被简单地忽略。
至于如何检索给定频道的现有订阅数,SE.Redis公开了GetSubscriberCounts()方法来执行此操作,不幸的是,该方法不是公共的。
如果您希望跟踪当前的频道/订阅,您可以使用外部的不同结构-例如缓存键的Dictionary<string>或类似结构。

相关问题