springboot整合單機(jī)緩存ehcache的實(shí)現(xiàn)
區(qū)別于redis的分布式緩存,ehcache是純java進(jìn)程內(nèi)的單機(jī)緩存,根據(jù)不同的場(chǎng)景可選擇使用,以下內(nèi)容主要為springboot整合ehcache以及注意事項(xiàng)
添加pom引用
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.9.2</version>
</dependency>啟動(dòng)類添加開啟緩存注解:@EnableCaching
添加xml配置,注意,ehcache需要單獨(dú)的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<!--默認(rèn)緩存策略 -->
<!-- external:是否永久存在,設(shè)置為true則不會(huì)被清除,此時(shí)與timeout沖突,通常設(shè)置為false-->
<!-- diskPersistent:是否啟用磁盤持久化-->
<!-- maxElementsInMemory:最大緩存數(shù)量-->
<!-- overflowToDisk:超過(guò)最大緩存數(shù)量是否持久化到磁盤-->
<!-- timeToIdleSeconds:最大不活動(dòng)間隔,設(shè)置過(guò)長(zhǎng)緩存容易溢出,設(shè)置過(guò)短無(wú)效果,可用于記錄時(shí)效性數(shù)據(jù),例如驗(yàn)證碼-->
<!-- timeToLiveSeconds:最大存活時(shí)間-->
<!-- memoryStoreEvictionPolicy:緩存清除策略-->
<defaultCache
eternal="false"
diskPersistent="false"
maxElementsInMemory="1000"
overflowToDisk="false"
timeToIdleSeconds="60"
timeToLiveSeconds="60"
memoryStoreEvictionPolicy="LRU" />
<cache name="cache1"
eternal="false"
diskPersistent="false"
maxElementsInMemory="1000"
overflowToDisk="false"
timeToIdleSeconds="2"
timeToLiveSeconds="2"
memoryStoreEvictionPolicy="LRU" />
</ehcache>這里我定義了一個(gè)緩存名字為cache1
修改項(xiàng)目的配置文件application.properties,添加spring緩存類型以及緩存配置文件路徑
spring.cache.ehcache.config=classpath:ehcache.xml spring.cache.type=ehcache
上面的步驟做好之后,就可以使用了
給你需要加緩存的方法添加注解
@Configuration
public class TestConfig {
@Cacheable(value = "cache1",key = "#id")
public TestController.Person create(String id) {
return new TestController.Person();
}
}這里的value跟xml配置文件里的一致即可
我們調(diào)用一下測(cè)試看看
@GetMapping("/testCache1")
public void testCache1(@Param("id") String id) throws InterruptedException {
Person obj1 = testConfig.create(id);
Person obj2 = testConfig.create(id);
Thread.sleep(3000);
Person obj3 = testConfig.create(id);
Person obj4 = testConfig.create(id);
log.info("test1:"+obj1.toString());
log.info("test2:"+obj2.toString());
log.info("test3:"+obj3.toString());
log.info("test4:"+obj4.toString());
System.out.println(obj1.equals(obj2));
}執(zhí)行一下結(jié)果看

可以看到,obj1跟obj2是同一個(gè)對(duì)象,當(dāng)程序睡眠了三秒之后,再次調(diào)用方法,就會(huì)重新創(chuàng)建對(duì)象,緩存生效
注意事項(xiàng):
@Cacheable修飾的方法必須是public并且不能是static,原理是因?yàn)槭褂昧藙?dòng)態(tài)代理,需要重寫方法
xml里面的配置要寫全,要不然項(xiàng)目啟動(dòng)報(bào)錯(cuò),就是下圖這些

xml里面配置的defaultCache沒(méi)看出有啥用,我也沒(méi)刪了試試
使用緩存的方法不能在@RestController修飾的類中,即不能在controller層,要不然緩存失效,可以在@Service、@Configuratin、@Component等類下面
到此這篇關(guān)于springboot整合單機(jī)緩存ehcache的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot單機(jī)緩存ehcache內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python破解bilibili滑動(dòng)驗(yàn)證碼登錄功能
這篇文章主要介紹了python破解bilibili滑動(dòng)驗(yàn)證碼登錄功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
python生成13位或16位時(shí)間戳以及反向解析時(shí)間戳的實(shí)例
這篇文章主要介紹了python生成13位或16位時(shí)間戳以及反向解析時(shí)間戳的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Python中函數(shù)內(nèi)部無(wú)法獲取局部變量的解決辦法
本文介紹了在Python中如何處理函數(shù)內(nèi)部訪問(wèn)和修改外部局部變量的問(wèn)題,通過(guò)locals()獲取當(dāng)前函數(shù)的局部變量字典,globals()獲取全局變量字典,以及使用nonlocal關(guān)鍵字聲明非局部變量的方法,,需要的朋友可以參考下2025-07-07
python scipy卷積運(yùn)算的實(shí)現(xiàn)方法
這篇文章主要介紹了python scipy卷積運(yùn)算的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python驗(yàn)證的50個(gè)常見正則表達(dá)式
這篇文章主要給大家介紹了關(guān)于利用Python驗(yàn)證的50個(gè)常見正則表達(dá)式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

