線上經常遇到使用者想知道自己redis執行個體中資料的記憶體分布情況。
為了不影響線上執行個體的使用,我們一般會采用bgsave生成dump.rdb檔案,再結合redis-rdb-tools和sqlite來進行靜态分析。
自建redis可在用戶端執行bgsave生成rdb檔案。
阿裡雲資料庫redis版可以在控制台上可以進行資料備份和下載下傳的操作,下載下傳後的資料為rdb格式檔案。
步驟詳見下圖:

redis-rdb-tools是一個python的解析rdb檔案工具, 主要有一下三個功能:
生成記憶體快照
轉儲成json格式
使用标準的diff工具比較兩個dump檔案
在分析記憶體的使後,我們主要用到它的生成記憶體快照功能。
redis-rdb-tools有兩種安裝方式,任選其一即可。
使用pypi安裝
從源碼安裝
生成記憶體快照的指令為:
生成csv格式的記憶體報告。包含的列有:資料庫id,資料類型,key,記憶體使用量(byte),編碼。記憶體使用量包含key、value和其他值。
注意:記憶體使用量是理論上的近似值,在一般情況下,略低于實際值。
memory.csv例子:
sqlite,是一款輕型的資料庫。我們可以将前面生成的csv導入到資料庫中之後,就可以利用sql語句很友善的對redis的記憶體資料進行各種分析了。
導入方法:
資料導入以後,接下來想怎麼分析就怎麼分析了,舉幾個簡單的例子:
查詢key個數
查詢總的記憶體占用
查詢記憶體占用最高的10個key
查詢成員個數1000個以上的list
通過使用redis-rdb-tools + sqlite的方式,可以友善的對redis執行個體的記憶體情況進行靜态的分析。整個過程也比較簡單,擷取到rdb之後
即可
實際使用中,發現過一個list積攢了10多g的内容,也發現過43m以上的string類型的value, 往往不僅能解答使用者的疑惑,而且能夠幫助使用者排除業務中潛在的風險點,找到業務性能瓶頸。
總的來說,整個分析的過程簡單而實用,是每一個redis的使用者都非常值得掌握的一個方法。