問(wèn)題場(chǎng)景
一個(gè)系統(tǒng)經(jīng)過(guò)壓測(cè)發(fā)現(xiàn)并發(fā)能力不理想举哟,需要加緩存闪檬,已知:對(duì)一致性要求不高,需要緩存的數(shù)據(jù)量也可控榕暇,問(wèn):該如何選擇緩存框架?
- 這個(gè)情況的話,用客戶端緩存就行了唐础,客戶端緩存有很多框架可供選擇:Ehcache、Guava Cache矾飞、Spring Cache一膨;
Ehcache 特點(diǎn)
- 多級(jí)緩存策略,可以嵌入 Hibernate洒沦,Mybatis 中豹绪;
- 緩存的數(shù)據(jù)可以放在內(nèi)存或磁盤中;
- 緩存的數(shù)據(jù)在 JVM 重啟的時(shí)候可以寫入磁盤中申眼;
- 可以使用 RMI 或接口的方式實(shí)現(xiàn)分布式緩存瞒津;
- 允許注冊(cè)事件來(lái)監(jiān)聽緩存,當(dāng)緩存的數(shù)據(jù)增刪改的時(shí)候括尸,可以收到一個(gè)通知巷蚪;
Guava Cache 特點(diǎn)
- 相對(duì)于 CurrentHashMap,會(huì)限制內(nèi)存的使用濒翻,會(huì)自動(dòng)回收內(nèi)存屁柏;
Spring Cache
- 通過(guò)少量配置就可以使得既有代碼支持緩存;
- 不用安裝或部署額外的第三方組件就可以使用緩存肴焊;
- 支持 Spring Express Language前联,可以支持變量的定義和一些表達(dá)式;
- 支持 AspectJ娶眷,通過(guò)注解似嗤,可以實(shí)現(xiàn)緩存的提前加載或刪除;
- 支持自定義 key届宠,具有相當(dāng)?shù)撵`活性和擴(kuò)展性烁落;
客戶端緩存的區(qū)別與選型
緩存框架 | 能否持久化 | 是否有集群方案 | 體積是否龐大 | 是否有輔助功能 | 是否輕量 |
---|---|---|---|---|---|
Ehcahe | 是 | 是 | 相對(duì)大 | 有 | 否 |
Guava Cache | 否 | 否 | 否 | 否 | 是 |
Spring Cache | 否 | 否 | 否 | 否 | 是 |
- Spring Cache 不僅可以自己使用乘粒,還可以與其他緩存框架做整合;
- 對(duì)于文章一開始的場(chǎng)景伤塌,可以使用 Spring Cache + Ehcache 的組合方式灯萍;