Spring Boot集成EhCache緩存

Spring Boot集成EhCache緩存

在Java項目中,很多情況下需要用到緩存。筆者接觸過的緩存框架有EhCache、Redis、MongoDB,可是由於搞不清楚其中的區別,曾經面試過一些公司被問到EhCache和Redis的區別是什麼?為什麼項目中用到了EhCache二級緩存,卻又用到了Redis,其中的區別是什麼?當時由於技術儲備有限,未能正確回答出這些問題,工作機會也失之交臂。最近一段時間仔細研究了EhCache,這篇文章將從應用的層面講講如何在Spring Boot中使用EhCache。

一、使用說明

在一個Spring Boot項目中,引入EhCache依賴,然後在主啟動類裡面加上@EnableCaching開啟緩存機制,然後配置EhCache配置文件,就可以使用EhCache緩存了。

二、引入配置依賴

首先在Maven的pom.xml中加入EhCache依賴:



org.springframework.boot

spring-boot-starter-cache

net.sf.ehcache

ehcache

然後在src/main/resources裡面新增加入ehcache.xml,文件,指定緩存空間interfaces,內容如下:

eternal="false"

maxElementsInMemory="100"

overflowToDisk="false"

diskPersistent="false"

timeToIdleSeconds="0"

timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" />

指定磁盤緩存位置:


maxElementsInMemory="1000"

overflowToDisk="false"

diskPersistent="false"

timeToIdleSeconds="0"

timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />

完整的代碼如下:




其中ehcache.xsd需要在src/main/resources新建文件,內容如下:

Spring Boot集成EhCache緩存

然後在Spring Boot主啟動類加上開啟緩存:

Spring Boot集成EhCache緩存

三、業務實現

新建hx_sys_interface_config表,表結構如下:

Spring Boot集成EhCache緩存

新建SysInterfaceConfig實體類,代碼如下:

Spring Boot集成EhCache緩存

新增MyBatis,DAO層
SysInterfaceConfigMapper.java:

Spring Boot集成EhCache緩存

其MyBatis XML映射文件
SysInterfaceConfigMapper.xml增刪改查代碼如下:

Spring Boot集成EhCache緩存

Spring Boot集成EhCache緩存

Spring Boot集成EhCache緩存

四、引入EhCache緩存

編寫
SysInterfaceConfigServiceImpl.java在Service層加入緩存標誌:

Spring Boot集成EhCache緩存

新增方法,@CacheEvict加入緩存空間interfaces(前面ehcache.xml中配置的緩存空間):

Spring Boot集成EhCache緩存

刪除方法,從緩存空間@CacheEvic去掉緩存鍵:

//刪除用戶數據

@CacheEvict(value = DEMO_CACHE_NAME,key = "'interface_'+#id")//這是清除緩存

@Override

public void delInterfaceConfig(String id)

{

sysInterfaceConfigMapper.delInterfaceConfig(id);

}

更新用戶數據,重新設置緩存@CachePut:

//更新用戶數據

@CachePut(value = DEMO_CACHE_NAME,key = "'interface_'+#sysInterfaceConfig.getId()")@Override

public void updateInterfaceConfig(SysInterfaceConfig sysInterfaceConfig)

{

sysInterfaceConfigMapper.updateInterfaceConfig(sysInterfaceConfig);

}

從緩存中取出數據,@Cacheable,從緩存空間緩存鍵取出數據:

@Cacheable(value=DEMO_CACHE_NAME,key="'interface_'+#id")

@Override


public SysInterfaceConfig findInterfaceConfig(String id)

{

return sysInterfaceConfigMapper.findInterfaceConfig(id);

}

五、測試EhCache緩存

開啟SQL打印,在application.yml中開啟DAO層SQL打印:

Spring Boot集成EhCache緩存

編寫Controller層:

Spring Boot集成EhCache緩存

測試插入緩存數據:

Spring Boot集成EhCache緩存

測試查詢緩存數據:

Spring Boot集成EhCache緩存

測試更新緩存數據:

Spring Boot集成EhCache緩存

測試刪除緩存數據:

Spring Boot集成EhCache緩存

在Swagger UI界面中:



Spring Boot集成EhCache緩存

點擊testInsert:

Spring Boot集成EhCache緩存

查看控制檯的SQL語句:

Spring Boot集成EhCache緩存

: ==> Preparing: INSERT INTO hx_sys_interface_config(ID,APP_CODE,`NAME`,APP_NUM,URL,APP_TEST,END_DATE,STATUS,REMARK1,REMARK2) VALUES(?,?,?,?,?,?,?,?,?,?)

2019-11-05 18:20:43.727 DEBUG 21356 --- [nio-8480-exec-8]
c.o.c.m.t.S.insertInterfaceConfig : ==> Parameters: 3(String), htest(String), 接口:4(String), 004(String), www.baidu.com(String), www.baidu.com?i=4(String), 2019-11-05 18:20:43.679(Timestamp), 1(String), remark1(String), remark2(String)

2019-11-05 18:20:43.770 DEBUG 21356 --- [nio-8480-exec-8] c.o.c.m.t.S.insertInterfaceConfig : <== Updates: 1

Swagger界面點擊testSelect:

Spring Boot集成EhCache緩存

控制檯SQL打印:

2019-11-05 18:23:20.311 DEBUG 21356 --- [nio-8480-exec-7] c.o.c.m.t.S.findInterfaceConfig : ==> Preparing: SELECT * FROM hx_sys_interface_config WHERE ID=?

2019-11-05 18:23:20.312 DEBUG 21356 --- [nio-8480-exec-7] c.o.c.m.t.S.findInterfaceConfig : ==> Parameters: 3(String)

2019-11-05 18:23:20.338 DEBUG 21356 --- [nio-8480-exec-7] c.o.c.m.t.S.findInterfaceConfig : <== Total: 1

id:3,name:接口:4,appNum:004,endDate:2019-11-05 18:20:44

再在Swagger界面點擊testSelect:

Spring Boot集成EhCache緩存

可以看到控制檯沒有打印SQL,沒有查詢數據庫,說明走了緩存,從緩存中取數據:

Spring Boot集成EhCache緩存

查看界面結果,從緩存中取數據:

Spring Boot集成EhCache緩存

在Swagger界面點擊testUpdate,更新緩存:

Spring Boot集成EhCache緩存

控制檯更新了數據:

Spring Boot集成EhCache緩存

: ==> Preparing: UPDATE hx_sys_interface_config SET APP_CODE=?,`NAME`=?,APP_NUM=?,URL=?,APP_TEST=?, END_DATE=?,STATUS=?,REMARK1=?,REMARK2=? WHERE ID=?

2019-11-05 18:27:49.148 DEBUG 21356 --- [nio-8480-exec-6]
c.o.c.m.t.S.updateInterfaceConfig : ==> Parameters: htest(String), 更新後接口(String), 更新後編號(String), www.baidu.com(String), www.baidu.com?i=4(String), 2019-11-05 18:27:49.096(Timestamp), 1(String), remark1(String), remark2(String), 3(String)

2019-11-05 18:27:49.191 DEBUG 21356 --- [nio-8480-exec-6] c.o.c.m.t.S.updateInterfaceConfig : <== Updates: 1

在Swagger UI點擊testSelect:

Spring Boot集成EhCache緩存

查詢,控制檯沒有打印SQL語句,查詢成功,從緩存中取出數據,成功

這篇文檔簡單的說明了Spring Boot集成EhCache的使用方法,後續還會更新。


分享到:


相關文章: