【Redis熱點數據緩存】


我是🌟廖志偉🌟,一名🌕Java開發工程師🌕、📝Java領域優質創作者📝、🎉CSDN博客專家🎉、🌹幕后大佬社區創始人🌹。擁有多年一線研發經驗,研究過各種常見框架中間件的底層源碼,對於大型分布式微服務、三高架構(高性能高並發高可用)有過實踐架構經驗。

🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬



本文內容:


redis

熱點數據緩存

當前key是一個熱點key(例如一個熱門的娛樂新聞),並發量非常大重建緩存不能在短時間完成,可能是一個復雜計算,例如復雜的SQL、多次IO、多個依賴等在緩存失效的瞬間,有大量線程來重建緩存,造成后端負載加大,甚至可能會讓應用崩潰。

互斥鎖(mutex)

解決方案一:互斥鎖(mutex)

只允許一個線程重建緩存,其他線程等待重建緩存的線程執行完,重新從緩存獲取數據。

    1)從Redis獲取數據,如果值不為空,則直接返回值;否則執行下面的2.1)和2.2)步驟
    2.1)如果set(nx和ex)結果為true,說明此時沒有其他線程重建緩存, 那么當前線程執行緩存構建邏輯
    2.2)如果set(nx和ex)結果為false,說明此時已經有其他線程正在執 行構建緩存的工作,那么當前線程將休息指定時間(例如這里是50毫秒,取決於構建緩存的速度)后,重新執行函數,直到獲取到數據。

優缺點:如果構建緩存過程出現問題或者時間較長,可能會存在死鎖和線程池阻塞的風險,但是這種方法能夠較好地降低后端存儲負載,並在一致性上做得比較好。

永遠不過期

解決方案二:永遠不過期

從緩存層面來看,確實沒有設置過期時間,所以不會出現熱點key過期 后產生的問題,也就是“物理”不過期。

從功能層面來看,為每個value設置一個邏輯過期時間,當發現超過邏 輯過期時間后,會使用單獨的線程去構建緩存。

優缺點:由於沒有設置真正的過期時間,實際上已經不存在熱點key產生的一系列危害,但是會存在數據不一致的情況,同時代碼復雜度會增大。

問題:怎么知道哪些數據是熱點數據?因為本地緩存資源有限,不可能把所有的商品數據進行緩存,它只會緩存熱點的數據。那怎么知道數據是熱點數據呢?

利用redis4.x自身特性,LFU機制發現熱點數據。實現很簡單,只要把redis內存淘汰機制設置為allkeys-lfu或者volatile-lfu方式,再執行./redis-cli --hotkeys會返回訪問頻率高的key,並從高到底的排序,在設置key時,需要把商品id帶上,這樣就是知道是哪些商品了。


總結

以上就是今天要講的內容,還希望各位讀者大大能夠在評論區積極參與討論,給文章提出一些寶貴的意見或者建議📝,合理的內容,我會采納更新博文,重新分享給大家。

🙏四連 關注🔎點贊👍收藏⭐️留言📝

感謝大家的支持,用心寫博文分享給大家,你的支持(🔎點贊👍收藏⭐️留言📝)是對我創作的最大幫助。
🍊微信公眾號:南北踏塵
🍊主頁地址:java_wxid
🍊社區地址:幕后大佬

給讀者大大的話

我本身是一個很普通的程序員,放在人堆里,除了與生俱來的🌹盛世美顏🌹、所剩不多的發量,就剩下180的大高個了。就是我這樣的一個人,默默堅持寫博文也有好多年了,有句老話說的好,🌕牛逼之前都是傻逼式的堅持🌕。希望自己可以通過大量的作品,時間的積累,個人魅力、運氣和時機,可以打造屬於自己的🌟技術影響力🌟。同時也希望自己可以成為一個🎄懂技術🎄,🎄懂業務🎄,🎄懂管理🎄的綜合型人才,作為項目架構路線的總設計師,掌控全局的🌕團隊大腦🌕,技術團隊中的🍊絕對核心🍊是我未來幾年不斷前進的目標。


提示:以下都是資源分享,求個一鍵三連。

面試資料

福利大放送,🎉歡迎關注🔎點贊👍收藏⭐️留言📝,拜托了🙏,這對我真的很重要。
點擊:面試資料
提取碼:2021

200套PPT模板

福利大放送,🎉歡迎關注🔎點贊👍收藏⭐️留言📝,拜托了🙏,這對我真的很重要。
點擊:200套PPT模板
提取碼:2021

提問的智慧

福利大放送,🎉歡迎關注🔎點贊👍收藏⭐️留言📝,拜托了🙏,這對我真的很重要。
點擊:提問的智慧
提取碼:2021

Java開發學習路線

名稱 鏈接
JavaSE 點擊: JavaSE
MySQL專欄 點擊: MySQL專欄
JDBC專欄 點擊: JDBC專欄
MyBatis專欄 點擊: MyBatis專欄
Web專欄 點擊: Web專欄
Spring專欄 點擊: Spring專欄
SpringMVC專欄 點擊: SpringMVC專欄
SpringBoot專欄 點擊: SpringBoot專欄
SpringCould專欄 點擊: SpringCould專欄
Redis專欄 點擊: Redis專欄
Linux專欄 點擊: Linux專欄
Maven3專欄 點擊: Maven3專欄
Spring Security5專欄 點擊: Spring Security5專欄
更多專欄 更多專欄,請到 java_wxid主頁 查看

P5學習路線圖
p5學習路線圖P6學習路線圖
P6學習路線圖P7學習路線圖
P7學習路線圖P8學習路線圖
P8學習路線圖

以上四張圖詳細介紹了作為Java開發工作者所需要具備的知識技能,同學們學廢了嘛,有想法系統學習的同學可以私聊我,🎉歡迎關注🔎點贊👍收藏⭐️留言📝。
🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬


免責聲明!

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



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