Redis 例項分析工具

訢亮發表於2019-01-18

緣由

Redis 是網際網路產品開發中不可缺少的常備武器,它效能高、資料結構豐富、簡單易用,但同時也是因為太容易用了,開發同學不管什麼資料、不管這資料有多大、不管資料有多少,通通塞進去,最後導致的問題就是 Redis 記憶體使用持續上升,但是又不知道里面的資料是不是有用,是否可以拆分和清理。

為了更好地使用 Redis,除了對 Redis 做一些使用規範,還需要對線上使用的 Redis 有充分的瞭解。 那麼問題來了:

  • 一個 Redis 的例項用了那麼大的記憶體,裡邊到底存了啥?
  • 都有哪些 key?
  • 每個 key 佔用了多少空間?

思路

一、 先通過 keys * 命令,拿到所有的 key,然後根據 key 再獲取所有的內容。

  • 優點:可以不使用 Redis 機器的硬碟,直接網路傳輸。
  • 缺點:如果 key 數量特別多,keys 命令可能會導致 Redis 卡住影響業務;需要對 Redis 請求非常多次,資源消耗多;遍歷資料太慢。

二、開啟 aof,通過 aof 檔案獲取到所有資料。

  • 優點:無需影響 Redis 服務,完全離線操作,足夠安全。
  • 缺點:有一些 Redis 例項寫入頻繁,不適合開啟 aof,普適性不強;aof 檔案有可能特別大,傳輸、解析起來太慢,效率低。

三、使用 bgsave,獲取 rdb 檔案,解析後獲取資料。

  • 優點:機制成熟,可靠性好;檔案相對小,傳輸、解析效率高。
  • 缺點:bgsave 雖然會 fork 子程式,但還是有可能導致主程式卡住一段時間,對業務有產生影響的風險。

評估後,決定採用低峰期在從節點做 bgsave 獲取 rdb 檔案,相對安全可靠,也可以覆蓋所有業務的 Redis 叢集。也就是說每個例項每天在低峰期自動生成一個 rdb 檔案,即使報表資料有一天的延遲也是可以接受的。

拿到了 rdb 檔案就相當於拿到了 Redis 例項的所有資料,接下來就是生成報表的過程了:

  • 解析 rdb 檔案,獲取到 Key 和 Value 的內容;
  • 根據相對應的資料結構及內容,估算記憶體消耗等;
  • 統計並生成報表;

Redis 例項 -> rdb 檔案 -> 解析 rdb -> 估算記憶體消耗 -> 統計計數 -> 報表資料

參考地址

聯想

1、制定開發團隊的Redis Key使用規範,通過Key可以獲得到:

  • 屬於什麼域名(加域名標示);
  • 屬於什麼資料型別(加資料型別標識);
  • 是否設定過期時間;
  • ...

2、統一平臺進行redis key的申請,只有申請了才能進行使用。

  • 申請人;
  • 申請時間;
  • ...

Redis 例項分析工具

相關文章