淺談Redis - 熱點key問題 | 京東雲技術團隊

熱key問題描述

熱key問題就是突然有幾十萬的請求去訪問redis上的某個特定key,那麼這樣會造成流量過於集中,達到物理網卡上限,從而導致這臺redis服務器直接宕機。

如何發現熱點key

  • 憑藉業務經驗,進行預估哪些是熱key。比如某些商品要做秒殺,則商品key就可以判斷爲熱key,但並非所有業務都能預估出熱key。

  • 在客戶端進行收集。比如在redis客戶端執行redis命令之前,加入一行代碼進行命令數據收集,然後通過網絡將收集的命令發送出去,缺點是對客戶端代碼有入侵。

  • 在Proxy層做收集,但是並非所有的redis集羣都有proxy。

  • 用redis自帶命令,monitor命令可以實時抓取出redis服務器接收到的命令,然後寫代碼統計出熱key是啥,不過高併發條件下,有內存暴增的隱患,影響redis的性能。redis4.0.3提供了客戶端熱點key發現功能,如果key比較多,執行比較慢。

  • 自己抓包評估,redis客戶端使用TCP協議與服務端進行交互,通信協議採用RESP,自己寫程序監聽端口,按照RESP協議規則解析數據進行分析,不過開發成本較高,不易維護。

如何解決熱key

  • 增加二級緩存,發現熱key以後,可以把熱key數據加載到系統JVM並設置合適的緩存過期時間,針對熱key的請求就會直接分散到各業務服務器上,防止所有請求同時訪問同一臺redis。

  • 備份熱key。可以把熱點key的數據備份到所有redis的集羣節點中,可以通過在熱點key後面拼接集羣節點編號,然後將這些備份key分散到所有集羣節點中,客戶端訪問熱點key的時候也在熱點key後面隨機拼接集羣節點編號,將熱點key的請求分散到不同集羣節點上。

作者:京東零售 曹志飛

來源:京東雲開發社區 轉載請註明來源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章