问题描述
pubsub channels
可以查看Redis中被订阅的频道(channel):
pubsub numpat
可以查看被订阅的模式(pattern)数量:
# redis-cli pubsub numpat
(integer) 3
问题:
除了查看被订阅模式的数量,我还需要获取每个订阅模式字符串的内容,怎么做 ?
解决方法
google没搜到现成的命令,决定自己修改redis-server
源码,打印模式链表的内容,用时3~5分钟,需要了解:
具体操作
1、下载Redis源码(这里用的是6.0.9版本的源码,下载链接),修改pubsub.c
,自定义一个模式链表打印函数myPubsubPatternsPrint
,实现参考如下:
// pubsub.c
void myPubsubPatternsPrint()
{
list *l = server.pubsub_patterns;
listNode *cur = l->head;
serverLog(LL_NOTICE, "[DEBUG] ALL PUBSUB PATTERNS: ");
while (cur != NULL) {
pubsubPattern *pp = (pubsubPattern *)(cur->value);
robj *obj = pp->pattern;
char *pattern = (char *)obj->ptr;
serverLog(LL_NOTICE, "%s", pattern);
cur = cur->next;
}
}
2、重新编译并安装redis-server,后台gdb call一下自定义的打印函数myPubsubPatternsPrint
得到模式链表的内容,如下图所示:
参考资料
【1】《Redis设计与实现》 第18章 发布与订阅