Redis中如何發現並優化big key?


Redis中的大key一直是重點需要優化的對象,big key既占用比較多的內存,也可能占用比較多的網卡資源,造成redis阻塞,因此我們需要找到這些big key進行優化

一、尋找big key
通常來說找到redis中的big key有如下幾種方法

  1. redis-cli自帶--bigkeys,例如:redis-cli -h -a --bigkeys
  2. 獲取生產Redis的rdb文件,通過rdbtools分析rdb生成csv文件,再導入MySQL或其他數據庫中進行分析統計,根據size_in_bytes統計bigkey
  3. 通過python腳本,迭代scan key,每次scan 1000,對掃描出來的key進行類型判斷,例如:string長度大於10K,list長度大於10240認為是big bigkeys
  4. 其他第三方工具,例如:redis-rdb-cli
    地址:https://github.com/leonchen83/redis-rdb-cli

二、優化big key

  1. 優化big key的原則就是string減少字符串長度,list、hash、set、zset等減少成員數
  2. 以hash類型舉例來說,對於field過多的場景,可以根據field進行hash取模,生成一個新的key,例如原來的
    hash_key:{filed1:value, filed2:value, filed3:value ...},可以hash取模后形成如下key:value形式
    hash_key:mod1:{filed1:value}
    hash_key:mod2:{filed2:value}
    hash_key:mod3:{filed3:value}
    ...
    取模后,將原先單個key分成多個key,每個key filed個數為原先的1/N
  3. string類型的big key,如文章正文,建議不要存入redis,用文檔型數據庫MongoDB代替或者直接緩存到CDN上等方式優化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM