小白都能看懂的緩存入門
緩存是程序員必須了解的技術(shù),無(wú)論是前端、后端還是客戶端,大到復(fù)雜的系統(tǒng)架構(gòu),小到 CPU 或是芯片,都少不了緩存的影子。
下面只需 5 分鐘,帶你入門緩存技術(shù)。
什么是緩存?
緩存(Cache)本意是指可以進(jìn)行高速數(shù)據(jù)交換的存儲(chǔ)器,通俗點(diǎn)來(lái)說(shuō),就是通過(guò)將數(shù)據(jù)提前存放到內(nèi)存,以提高訪問(wèn)速度。
在我們?cè)O(shè)計(jì)程序或算法時(shí),有兩個(gè)基本指標(biāo),即時(shí)間復(fù)雜度和空間復(fù)雜度。有時(shí),我們的程序無(wú)法同時(shí)滿足二者,就只能以時(shí)間換空間,或者以空間換時(shí)間。緩存是以空間換時(shí)間思想的典型應(yīng)用,犧牲一部分內(nèi)存空間,能夠得到數(shù)百倍的讀取性能提升。
緩存最常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)是鍵值對(duì)(Key/Value),類似字典,即一個(gè) Key 對(duì)應(yīng)一個(gè) Value,訪問(wèn)緩存時(shí)通過(guò) Key 獲取 Value。

為什么需要緩存?
最簡(jiǎn)單的后端系統(tǒng)只需要一個(gè)應(yīng)用服務(wù)(比如 Tomcat)和持久化存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)(如 MySQL),對(duì)于一個(gè)訪問(wèn)量很小的系統(tǒng)來(lái)說(shuō),這樣的架構(gòu)就足夠了。



緩存類別
本地緩存
class LocalCache {private static Map<String, Object> cache = new HashMap<>();private LocalCache() {}public static void put(String key, Object value) {cache.put(key, value);}public static Object get(String key) {return cache.get(key);}}

分布式緩存

多級(jí)緩存

緩存淘汰策略
LRU 最近最少使用
近似 LRU 算法
TTL 超時(shí)時(shí)間
LFU 最少使用
FIFO 先進(jìn)先出

Second-Chance
Random 隨機(jī)
緩存實(shí)現(xiàn)
Caffeine
Guava Cache
Ehcache
Memcached
Redis

Spring Cache
沒(méi)有銀彈

評(píng)論
圖片
表情
