緩存
提到緩存,你能想到什么?一級(jí)緩存,二級(jí)緩存,web緩存,redis……
你所能想到的各種包羅萬象存在的打著緩存旗號(hào)存在的各種技術(shù)或者實(shí)現(xiàn),無非都是宣揚(yáng)緩存技術(shù)的優(yōu)勢(shì)就是快,無需反復(fù)查詢等。
當(dāng)然,這里要講的不是一級(jí)二級(jí),也不是redis,而是Spring的緩存支持。當(dāng)時(shí)基于工作上的業(yè)務(wù)場(chǎng)景,考慮需要用到緩存技術(shù),但是并不清楚該用什么樣的緩存技術(shù),起初甚至有想過把信息寫到redis中,然后讀redis的信息(現(xiàn)在想想,真是小題大做),后來發(fā)現(xiàn)Spring提供了緩存的解決方案——Spring Cache。雖然最終找到了一個(gè)更加簡(jiǎn)便討巧的方式解決了問題,但是今天還是把自己零碎的Spring Cache知識(shí)稍稍梳理下。
這里大概介紹下業(yè)務(wù)場(chǎng)景:
現(xiàn)在有功能模塊一和功能模塊二,分別負(fù)責(zé)兩件事;
執(zhí)行功能模塊二的時(shí)候,可以用到模塊一的執(zhí)行結(jié)果,當(dāng)然不用也可以,那就再執(zhí)行一遍;
讀取功能模塊一執(zhí)行后存放在Cache中的數(shù)據(jù),這時(shí)候就省去重新執(zhí)行模塊一的冗余操作
流程圖如下:
Spring Cache
有關(guān)Spring Cache的理論詳細(xì)介紹可以看官方文檔或者參閱《Spring實(shí)戰(zhàn)》第十三章,這里偏代碼實(shí)戰(zhàn)看看Spring Cache如何使用。
聲明啟用緩存
就像如果要啟用AOP需要添加
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
一樣,如果要用cache,也需要聲明
<cache:annotation-driven />
這樣還不夠,除此以外,我們還需要一個(gè)緩存管理器
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" &nbs