問題描述
pubsub channels
可以檢視Redis中被訂閱的頻道(channel):
pubsub numpat
可以檢視被訂閱的模式(pattern)數量:
# redis-cli pubsub numpat
(integer) 3
問題:
除了檢視被訂閱模式的數量,我還需要擷取每個訂閱模式字元串的内容,怎麼做 ?
解決方法
google沒搜到現成的指令,決定自己修改
redis-server
源碼,列印模式連結清單的内容,用時3~5分鐘,需要了解:
- Redis源碼編譯方法,參考官網或本人的部落格
- Redis伺服器将所有模式的訂閱資訊儲存在伺服器狀态的
連結清單中。pubsub_patterns
具體操作
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章 釋出與訂閱