1.前言&基本介紹
在原始的系統架構中,我們都由程序直接連接DB,隨着業務的進一步開展,DB的壓力越來越大,為了緩解DB的這一壓力,我們引入了緩存,在程序連接DB中加入緩存層,
從而減輕數據庫壓力,而且緩存一般存在於內存中,相比於存在硬盤中的DB在讀取速度上絕對是比DB高幾個等級。下面我們來簡單聊聊關於緩存幾個東西
2.緩存的優缺點
緩存的優點就是“快”,一個快字基本能概括了。如上文說的加速讀寫,分流對數據庫的壓力,歸根結底就是對快字的應用及其本身,缺點主要是如下三點:
1.數據不一致性:DB的數據與緩存中的數據不一致
2.開發成本:需要同時處理緩存層跟DB層的邏輯,增加了開發成本
3.維護成本:例如需要對緩存層進行一個監控,增加了運維的成本
3.緩存更新策略
在上面中我們說到數據不一致性,一般來說緩存也是需要有生命周期的,需要被更新或者刪除,這樣才能保持緩存的可控性,在緩存更新中有如下三點:
4.緩存粒度
假設一張用戶表有20個字段,那是否需要將全部字段都放到緩存中?這就涉及到一個粒度的問題!數據字段放少了,就會出現了不通用的問題;數據字段放多了,空間占用也多,序列化跟反序
列化消耗的性能更多了。在粒度這個問題上還是需要根據通用性,代碼維護,性能跟空間占用這幾點上進行考慮, 簡單來說就是靠經驗了
5.緩存穿透
緩存穿透指的是查詢一個不存在的數據,DB跟緩存都不會命中的數據。這樣的話每次查詢都會到DB層中查詢,DB層負載加大還有可能造成死機,這樣緩存就失去了保護DB層的意義。出現這種情況有兩種:1.攻擊,爬蟲的大量請求;2.業務自身有問題。現在基本流行的解決方案有以下兩種:
5.1 緩存空對象,當DB層也查不到數據的時候,緩存一個null值進緩存,這樣下一次的話就直接從緩存中讀取,保護了后端。不過這種帶來的后果是緩存了更多的鍵,需要更多的空間,而且不可控性增加
6.雪崩優化
指的是原先的緩存層承載了大量的請求,有效的保護了DB層,但是假如緩存層炸了,那所有的請求都直接穿透到DB層,會容易造成DB層也炸了。就這個問題一直沒有一個很完美的解決方案,可以從下列兩個方面進行思考:
7.總結
最后用Xmind總結一下:
出處:http://www.cnblogs.com/powerdk/p/7116830.html