溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java高并發場景下緩存常見問題有哪些

發布時間:2021-10-20 17:49:00 來源:億速云 閱讀:170 作者:柒染 欄目:大數據

本篇文章為大家展示了java高并發場景下緩存常見問題有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

緩存一致性

    當數據實時性要求很高時,需要保證緩存中的數據與數據庫中的數據一致,緩存節點與副本中的數據一致,不能出現差異現象,這就比較依賴緩存的過期和更新策略了。一般會在數據發生更改的時候,主動跟新緩存中的數據或者移除對應的緩存,這時可能會出現緩存一致性的問題。

    現象一:更新數據庫成功,更新緩存失敗,數據不一致。

    現象二:更新緩存成功,更新數據庫失敗,數據不一致。

    現象三:更新數據庫成功,淘汰緩存失敗,數據不一致。

    現象四:淘汰緩存成功,更新數據庫失敗,查詢緩存miss。

緩存并發問題

    緩存過期后將嘗試從后端的數據庫獲取數據,這時一個看似合理的流程,但是在高并發場景下,有可能有多個請求從數據庫中請求數據,對后端數據庫造成極大的沖擊,甚至導致雪崩現象。此外當某個緩存的Key被更新時,同時也可能被大量請求獲取,這也會導致一致性的問題。如何避免類似的問題?可以通過鎖的機制來避免。在緩存更新或更新的情況下,先嘗試獲取鎖,當更新或者從數據庫獲取數據完成后,在釋放鎖。其他請求只要犧牲一定的等待時間就可以從緩存中繼續獲取數據。

緩存穿透問題

    在高并發場景下,如果某個Key被高并發訪問,沒有被命中,出于對容錯性的考慮,會嘗試從后端數據庫中獲取,從而導致大量的請求達到數據庫,而該Key對應的數據本身就是空的情況下,就導致了數據庫中并發的去執行了很多不必要的查詢操作,從而導致了巨大的沖擊和壓力。這種情況下可以通過以下幾種方式來避免緩存穿透問題:

  1. 緩存空對象:對查詢結果為空的對象,也進行緩存,如果是集合的話,可以緩存一個空集合

  2. 單獨過濾處理:對所有可能數據為空的Key,進行統一的存放。在請求前做攔截,這樣避免請求穿透到后端數據庫。這種方式實現起來相對復雜。比較適合命中不高但是更新頻繁的數據

緩存的雪崩現象 

請求都到后臺數據庫導致系統崩潰

上述內容就是java高并發場景下緩存常見問題有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女