redis中大key問題的解決思路

justlearn發表於2024-08-28

redis中如果某一個key-value值過大,在訪問量比較高的時候就可能會造成網路頻寬不足,例如一個value值儲存大小為5MB,同時有5000個併發訪問,網路頻寬需要209.7 Gbps,這必然會造成網路阻塞。其次redis中是單執行緒結構如果一個key-value值佔用記憶體過大,傳輸時佔用此執行緒時間過長,會影響其他資料的讀取效率

在解決大key問題時,首先我們的找出大key:

  1. redis-cli --bigkeys命令。可以用來找到某個例項5種資料型別(string、hash、list、set、zset)最大的key。
    • 優點:不阻塞服務
    • 缺點:資訊較少(只有各型別最大的key資訊),內容不夠精確(例如hash/list/set/zset都是以元素個數衡量大key,但實際上元素個數多不代表佔用記憶體大)。
  2. redis-rdb-tools工具。redis例項上執行bgsave,然後對dump出來的rdb檔案進行分析。
    • 優點:獲取資訊更詳細
    • 缺點:需要離線操作,獲取結果時間較長
  3. 使用實時Top key工具
    • 優點:準確性高、對效能幾乎無影響。

    • 缺點:展示的Key數量有一定限制,但能滿足常規場景下的需求。

所以我們在設計key值時應該儘量避免大key問題的出現,以下是我的解決思路:

1、大key問題我們儘量在設計之初就避免此問題的產生,合理設計業務訪問量較大的資料結構,儘量避免在訪問量較大的同時資料記憶體也過大

2、及時清除無效資料,例如list過長其中又儲存著很多無效資料、hash中有大量無效資料,避免無效資料佔用記憶體

3、必要時可以將redis中資料進行壓縮,用時間換取空間

4、硬體上可以增加網路頻寬提高網路傳輸

相關文章