日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

缓存分析

發布時間:2024/4/13 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 缓存分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

緩存

首頁的訪問量非常大,而首頁中的商品類目訪問量更大,鼠標移動就在訪問,查詢所有的數據,如果每次訪問都實時到數據庫獲取數據,數據庫的訪問壓力太大。

而這些信息一般更新的頻率比較低,短時間內不會發生改變。因此,我們可以考慮在前臺系統中,增加一層緩存,把這些數據緩存起來,請求到來時,不再調用數據接口,而是直接讀取緩存中的數據。

這樣就能大大減少首頁分類加載所需時間,提高并發性能。

?

加不加緩存的標準:

  • 變化頻率低

  • 訪問頻繁

  • 實現:使用Redis實現緩存。

    ?

    如何實現

  • 先讀緩存,緩存有,直接返回。

  • 緩存沒有,再讀數據庫

  • 寫:

  • 雙寫模式:寫數據庫,寫緩存

  • 失效模式:緩存失效(刪除緩存),寫數據庫

  • 讀取緩存步驟數據一致性一般沒有什么問題,但是一旦涉及到數據更新:數據庫和緩存更新,就容易出現緩存(Redis)和數據庫(MySQL)間的數據一致性問題

    不管先保存到MySQL,還是先保存到Redis都面臨著一個保存成功而另外一個保存失敗的情況。

    不管是先寫MySQL數據庫,再刪除Redis緩存;還是先刪除緩存,再寫庫,都有可能出現數據不一致的情況。舉一個例子:

    1.如果刪除了緩存Redis,還沒有來得及寫庫MySQL,另一個線程就來讀取,發現緩存為空,則去數據庫中讀取數據寫入緩存,此時緩存中為臟數據。

    2.如果先寫了庫,在刪除緩存前,寫庫的線程宕機了,沒有刪除掉緩存,則也會出現數據不一致情況。

    因為寫和讀是并發的,沒法保證順序,就會出現緩存和數據庫的數據不一致的問題。

    ?

    解決:

  • 基于mysql的binlog日志(canal)

  • 消息隊列

  • 總結

    以上是生活随笔為你收集整理的缓存分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。