0%

如何查看Redis订阅的模式字符串

问题描述

pubsub channels可以查看Redis中被订阅的频道(channel):

pubsub numpat可以查看被订阅的模式(pattern)数量:

1
2
# redis-cli pubsub numpat
(integer) 3

问题:

除了查看被订阅模式的数量,我还需要获取每个订阅模式字符串的内容,怎么做 ?

解决方法

google没搜到现成的命令,决定自己修改redis-server源码,打印模式链表的内容,用时3~5分钟,需要了解:

  • Redis源码编译方法,参考官网或本人的博客

  • Redis服务器将所有模式的订阅信息保存在服务器状态的pubsub_patterns链表中。

具体操作

1、下载Redis源码(这里用的是6.0.9版本的源码,下载链接),修改pubsub.c,自定义一个模式链表打印函数myPubsubPatternsPrint,实现参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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章 发布与订阅