1. 程式人生 > >WEB快取_如何解決快取的一致性

WEB快取_如何解決快取的一致性

https://coolshell.cn/articles/17416.html

https://blog.csdn.net/simba_1986/article/details/77823309

目的
保證資料庫資料和快取資料的一致性

一個總的原則: 一旦資料庫更新了,就把原來的快取失效掉

具體方案

    1:資料庫資料更新後,同步更新/失效掉舊的快取資料

    2:查詢資料後回寫快取

    3:當快取資料與資料庫資料不一致時,有後臺admin介面可以清掉業務快取

    4:保證查詢不到快取時業務邏輯的正確性

    5:每天的定時任務全域性更新業務快取(半夜)

    6:儘可能給所有快取設定過期時間

    7:靠程式碼review,保證資料修改邏輯的正確性

其他

關於折衷的問題

假設有一個數據,它更新頻繁,訪問量很高,我們將其快取,但是由於更新頻繁,所以可能頻繁觸發清快取操作,這樣快取實際上就成了擺設。如果業務允許,我們不需要每次都清快取,簡而言之,就是允許系統存在一小段時間的資料顯示不一致的情況。(實時更新資料庫,定時重新整理快取)

寫完資料庫後是馬上更新快取還是直接刪除快取

如果寫資料庫的值與更新到快取值是一樣的,不需要經過任何計算,可以馬上更新快取

如果寫資料庫的值與更新快取的值不一致,寫入快取中的資料需要經過幾個表的關聯計算後將得到的結果插入快取,那就沒必要馬上更新快取,只要刪除快取即可,等到查詢的時候把計算後得到的結果插入到快取中即可。

所以一般的策略是當更新資料時,先刪除快取資料,然後更新資料庫,而不是更新快取,等要查詢的時候才把最新的資料更新到快取

先更新資料庫還是先刪除快取

    誰先誰後都有可能出現問題(https://coolshell.cn/articles/17416.html)

    先刪除快取,然後再更新資料庫,如果刪除快取失敗,那就不要更新資料庫,如果說刪除快取成功,而更新資料庫失敗,那查詢的時候只是從資料庫裡查了舊的資料而已,這樣就能保持資料庫與快取的一致性。(更新資料庫前後都刪除一次快取,確保資料的一致性)(但也有其他問題,具體看連線"酷殼"介紹)

頁面靜態化

以上說的快取,都是資料快取,還有一種更加高階的快取,即把動態頁面(如JSP)進行靜態化處理,這個比資料快取複雜的多。目前有一些開源的框架可以支援,比如varnish,效能很高,當然學習成本也很高。關於

varnish的使用,本文就不贅述了,有興趣的可以自行去其官方網站查閱。