參考:https 😕/blog.csdn.net/qq_35433716/article/details/86375506
爲什麼要用緩存
- 提高查詢速度:緩存的查詢速度比數據庫的查詢速度快。
- 提高併發量:緩存承擔的部分請求,支持更高的併發。
緩存雪崩
什麼是緩存雪崩
- 緩存大面積失效,導致大量請求直接請求數據庫,從而導致系統崩潰。
- 緩存系統掛掉,導致請求直接到數據。
如何解決緩存雪崩
- 針對第一種情況,在設置緩存淘汰時間時,可以隨機設置,避免大量緩存一起失效,導致數據庫負載瞬時負載急劇增加。
- 針對第二種情況
- 事前,注意redis的高可用,採用redis集羣;並做好緩存持久化。
- 事中,一旦緩存真的掛掉了,我們可以採用 替換緩存的機制+限流 ,防止大量的請求直接把數據庫打掛。
- 事後,利用持久化的緩存,重啓redis後,從硬盤中的數據恢復緩存,快速恢復緩存系統。
緩存穿透
什麼是緩存穿透
- 當我們請求的一些數據,數據庫和緩存中都沒有的話,那麼這個請求會先查詢緩存,然後查詢數據庫,然後才返回。如果有大量的這種請求,我們的緩存機制其實是沒有作用的,數據庫很有可能被這種大量穿透請求打掛。
如何解決緩存穿透
- 利用布隆過濾器,或者壓縮filter提前過濾非法請求。
- 對於非法請求也記錄在緩存中,下次查詢到在非法請求的緩存中,直接返回。
緩存與數據庫雙寫一致性
如何保證緩存與數據庫雙寫對的一致性
先刪除緩存,再更新數據庫
在高併發下表現不如意,在原子性被破壞時表現優異
先更新數據庫,再刪除緩存(Cache Aside Pattern設計模式)
在高併發下表現優異,在原子性被破壞時表現不如意