我在复习一些旧代码。我们有一些缓存键,可以保存少量的二进制数据。
每当我们成功地检索到这些缓存项之一时,我们调用:
RedisController.GetConnection().GetSubscriber().SubscribeAsync(cacheKey, onMessageReceived);
其中通道名称是该高速缓存键的名称。
- 每次获得该高速缓存键时 * 我们都调用此方法,这可能会连续调用数十次。
我的问题是订阅一个已经存在的频道是否有效,或者请求被廉价地忽略了?似乎没有任何方法可以做到沿着几点:
var subscriber = RedisController.GetConnection().GetSubscriber();
if(!subscriber.isSubscribed(cacheKey) {
RedisController.GetConnection().GetSubscriber().SubscribeAsync(cacheKey, onMessageReceived);
}
1条答案
按热度按时间eyh26e7m1#
在SE.Redis中,订阅一个现有的Redis频道会向底层Redis服务器拓扑重新发出
SUBSCRIBE
命令,并将消息处理程序添加到处理程序的内部列表中,该列表由库本身管理;然而,在Redis端,订阅现有频道被简单地忽略。至于如何检索给定频道的现有订阅数,SE.Redis公开了GetSubscriberCounts()方法来执行此操作,不幸的是,该方法不是公共的。
如果您希望跟踪当前的频道/订阅,您可以使用外部的不同结构-例如缓存键的
Dictionary<string>
或类似结构。