我是🌟廖志偉🌟,一名🌕Java開發工程師🌕、📝Java領域優質創作者📝、🎉CSDN博客專家🎉、🌹幕后大佬社區創始人🌹。擁有多年一線研發經驗,研究過各種常見框架及中間件的底層源碼,對於大型分布式、微服務、三高架構(高性能、高並發、高可用)有過實踐架構經驗。
🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬
文章目錄
本文內容:
熱點數據緩存
當前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學習路線圖
P6學習路線圖
P7學習路線圖
P8學習路線圖
以上四張圖詳細介紹了作為Java開發工作者所需要具備的知識技能,同學們學廢了嘛,有想法系統學習的同學可以私聊我,🎉歡迎關注🔎點贊👍收藏⭐️留言📝。
🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬