對于緩存大家都不會陌生,但如何正確和合理的使用緩存還是需要一定的思考,本文將基于Java技術(shù)棧對緩存做一個相對詳細(xì)的介紹,內(nèi)容分為基本概念、本地緩存、遠(yuǎn)程緩存和分布式緩存集群幾個部分,重點(diǎn)在于理解緩存的相關(guān)概念,愿合理的使用Cache如下圖的妹子一樣美好。
電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

基本概念

緩存是計(jì)算機(jī)系統(tǒng)中必不可少的一種解決性能問題的方法,常見的應(yīng)用包括CPU緩存、操作系統(tǒng)緩存、本地緩存、分布式緩存、HTTP緩存、數(shù)據(jù)庫緩存等。其核心就是用空間換時間,通過分配一塊高速存儲區(qū)域(一般來說是內(nèi)存)來提高數(shù)據(jù)的讀寫效率,實(shí)現(xiàn)的難點(diǎn)就在于清空策略的實(shí)現(xiàn),比較合理的思路就是定時回收與即時判斷數(shù)據(jù)是否過期相結(jié)合。

緩存相關(guān)概念

  1. 命中率:命中率指請求次數(shù)與正確返回結(jié)果次數(shù)的比例,其影響因素包括數(shù)據(jù)實(shí)時性,如果股票類實(shí)時性要求很高的數(shù)據(jù),緩存的命中率會很低;緩存粒度問題, 如果KEY值包含的條件太多,會出現(xiàn)緩存命中率特別低的情況。通常來說,提高緩存命中率的方法包括增大緩存空間的大小的;對熱點(diǎn)數(shù)據(jù)進(jìn)行實(shí)時更新;調(diào)整緩存KEY的算法,保證緩存KEY的細(xì)粒度,如key-value;根據(jù)業(yè)務(wù)需要合理調(diào)整緩存的過期策略。

  2. 最大元素:緩存中可以存放的元素的最大數(shù)量。

  3. 清空策略包括FIFO,最先進(jìn)入緩存的數(shù)據(jù)在空間不夠時會被優(yōu)先清理;LFU一直以來最少被使用的元素會被清理,可以給緩存元素設(shè)置一個計(jì)數(shù)器實(shí)現(xiàn);LRU最近最少使用的緩存元素會被清理,可以通過一個時間戳來講最近未使用數(shù)據(jù)清除。

  4. 預(yù)熱策略包括全量預(yù)熱,一開始就加載全部數(shù)據(jù),適用于不怎么變化的數(shù)據(jù)(地區(qū)數(shù)據(jù));增量預(yù)熱,查詢不到時從數(shù)據(jù)源取出放入緩存。

Tip:
緩存在高并發(fā)場景下的常見問題

緩存相關(guān)問題

  1. 緩存穿透:一般的緩存系統(tǒng),都是按照key去緩存查詢