緩存和數據庫雙寫一致性
主要內容 緩存熱點數據 為何要使用緩存 哪類數據適合緩存 緩存的利與弊 緩存和數據庫雙寫一致性 不使用更新緩存而是刪除緩存 先刪除緩存,還是先操作數據庫? 我一定要數據庫和緩存數據一致怎麼辦 實戰:先刪除緩存,再更新數據庫 實戰:先更新數據庫,再刪緩存 實戰:刪除緩存重試機制 實戰:刪除緩存重試機制 實戰:讀取binlog異步刪除緩存 緩存熱點數據 在秒殺實際的業務中,一定有很多需要做緩存的場景,比如售賣的商品,包括名稱,詳情等。訪問量很大的數據,可以算是“熱點”數據了,尤其是一些讀取量遠大於寫入量的數據,更應該被緩存,而不應該讓請求打到數據庫上。 哪類數據適合緩存 緩存量大但又不常變化的數據,比如詳情,評論等。對於那些經常變化的數據,其實並不適合緩存,一方面會增加系統的複雜性(緩存的更新,緩存臟數據),另一方面也給系統帶來一定的不穩定性(緩存系統的維護) 。 但一些極端情況下,你需要將一些會變動的數據進行緩存,比如想要頁面顯示準實時的庫存數,或者其他一些特殊業務場景。這時候你需要保證緩存不能(一直)有臟數據,這就需要再深入討論一下。 緩存的利與弊 我們到底該不該上緩存的,這其實也是個trade-off的問題。 上緩存的優點: 能夠縮短服務的響應時間,給用戶帶來更好的體驗。 能夠增大系統的吞吐量,依然能夠提升用戶體驗。 減輕數據庫的壓力,防止高峰期數據庫被壓垮,導致整個線上服務BOOM! 上了緩存,也會引入很多額外的問題: 緩存有多種選型,是內存緩存,memcached還是redis,你是否都熟悉,如果不熟悉,無疑增加了維護的難度(本來是個純潔的數據庫系統)。 緩存系統也要考慮分佈式,比如redis的分佈式緩存還會有很多坑,無疑增加了系統的複雜性。 在特殊場景下,如果對緩存的準確性有非常高的...