對(duì)于緩存大家都不會(huì)陌生,但如何正確和合理的使用緩存還是需要一定的思考,本文將基于Java技術(shù)棧對(duì)緩存做一個(gè)相對(duì)詳細(xì)的介紹,內(nèi)容分為基本概念、本地緩存、遠(yuǎn)程緩存和分布式緩存集群幾個(gè)部分,重點(diǎn)在于理解緩存的相關(guān)概念,愿合理的使用Cache如下圖的妹子一樣美好。
基本概念
緩存是計(jì)算機(jī)系統(tǒng)中必不可少的一種解決性能問(wèn)題的方法,常見(jiàn)的應(yīng)用包括CPU緩存、操作系統(tǒng)緩存、本地緩存、分布式緩存、HTTP緩存、數(shù)據(jù)庫(kù)緩存等。其核心就是用空間換時(shí)間,通過(guò)分配一塊高速存儲(chǔ)區(qū)域(一般來(lái)說(shuō)是內(nèi)存)來(lái)提高數(shù)據(jù)的讀寫效率,實(shí)現(xiàn)的難點(diǎn)就在于清空策略的實(shí)現(xiàn),比較合理的思路就是定時(shí)回收與即時(shí)判斷數(shù)據(jù)是否過(guò)期相結(jié)合。
緩存相關(guān)概念
命中率:命中率指請(qǐng)求次數(shù)與正確返回結(jié)果次數(shù)的比例,其影響因素包括數(shù)據(jù)實(shí)時(shí)性,如果股票類實(shí)時(shí)性要求很高的數(shù)據(jù),緩存的命中率會(huì)很低;緩存粒度問(wèn)題, 如果KEY值包含的條件太多,會(huì)出現(xiàn)緩存命中率特別低的情況。通常來(lái)說(shuō),提高緩存命中率的方法包括增大緩存空間的大小的;對(duì)熱點(diǎn)數(shù)據(jù)進(jìn)行實(shí)時(shí)更新;調(diào)整緩存KEY的算法,保證緩存KEY的細(xì)粒度,如key-value;根據(jù)業(yè)務(wù)需要合理調(diào)整緩存的過(guò)期策略。
最大元素:緩存中可以存放的元素的最大數(shù)量。
清空策略包括FIFO,最先進(jìn)入緩存的數(shù)據(jù)在空間不夠時(shí)會(huì)被優(yōu)先清理;LFU一直以來(lái)最少被使用的元素會(huì)被清理,可以給緩存元素設(shè)置一個(gè)計(jì)數(shù)器實(shí)現(xiàn);LRU最近最少使用的緩存元素會(huì)被清理,可以通過(guò)一個(gè)時(shí)間戳來(lái)講最近未使用數(shù)據(jù)清除。
預(yù)熱策略包括全量預(yù)熱,一開(kāi)始就加載全部數(shù)據(jù),適用于不怎么變化的數(shù)據(jù)(地區(qū)數(shù)據(jù));增量預(yù)熱,查詢不到時(shí)從數(shù)據(jù)源取出放入緩存。
Tip:
緩存在高并發(fā)場(chǎng)景下的常見(jiàn)問(wèn)題
緩存相關(guān)問(wèn)題
緩存穿透:一般的緩存系統(tǒng),都是按照key去緩存查詢