天天看點

Redis檢視訂閱的模式串詳細内容

問題描述

pubsub channels

可以檢視Redis中被訂閱的頻道(channel):

Redis檢視訂閱的模式串詳細内容

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

得到模式連結清單的内容,如下圖所示:

Redis檢視訂閱的模式串詳細内容

參考資料

【1】《Redis設計與實作》 第18章 釋出與訂閱

繼續閱讀