最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot 整合EhCache實(shí)現(xiàn)單服務(wù)緩存的操作方法

 更新時(shí)間:2022年07月08日 09:42:56   作者:字母哥哥  
這篇文章主要介紹了springboot 整合EhCache實(shí)現(xiàn)單服務(wù)緩存的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在Spring框架內(nèi)我們首選Spring Cache作為緩存框架的門(mén)面,之所以說(shuō)它是門(mén)面,是因?yàn)樗惶峁┙涌趯拥亩x以及AOP注解等,不提供緩存的具體存取操作。緩存的具體存儲(chǔ)還需要具體的緩存存儲(chǔ),比如EhCache 、Redis等。Spring Cache與緩存框架的關(guān)系有點(diǎn)像SLF4j與logback、log4j的關(guān)系。

在這里插入圖片描述

  • EhCache 適用于單體應(yīng)用的緩存,當(dāng)應(yīng)用進(jìn)行分布式部署的時(shí)候,各應(yīng)用的副本之間緩存是不同步的。EhCache 由于沒(méi)有獨(dú)立的部署服務(wù),所以它的緩存和應(yīng)用的內(nèi)存是耦合在一起的,當(dāng)緩存數(shù)據(jù)量比較大的時(shí)候要注意系統(tǒng)資源能不能滿(mǎn)足應(yīng)用內(nèi)存的要求。
  • redis由于是可以獨(dú)立部署的內(nèi)存數(shù)據(jù)庫(kù)服務(wù),所以它能夠滿(mǎn)足應(yīng)用分布式部署的緩存集中存儲(chǔ)的要求,也就是分布式部署的應(yīng)用使用一份緩存,從而緩存自然是同步的。但是對(duì)于一些小規(guī)模的應(yīng)用,額外引入了redis服務(wù),增加了運(yùn)維的成本。

所以,比如我們自己開(kāi)發(fā)一個(gè)小博客,自己的服務(wù)器又沒(méi)有很多的資源獨(dú)立部署redis服務(wù),用EHCache作為緩存是比較好的選擇。如果是企業(yè)級(jí)用戶(hù)量,使用redis獨(dú)立部署的服務(wù)作為緩存是更好的選擇。

一、整合Spring Cache 與Ehcache

通過(guò)上一小節(jié)的學(xué)習(xí),可以使用Spring cache通過(guò)注解的方式來(lái)操作緩存,一定程度上減少了程序員緩存操作代碼編寫(xiě)量。注解添加和移除都很方便,不與業(yè)務(wù)代碼耦合,容易維護(hù)。 這一部分內(nèi)容是沒(méi)有變化的,所以我們?nèi)匀皇褂肧pring Cache。

第一步:pom.xml 添加 Spring cache 和 Ehcache的 jar 依賴(lài):

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
    </dependency>

第二步:添加入口啟動(dòng)類(lèi) @EnableCaching 注解開(kāi)啟 Caching,實(shí)例如下。

@EnableCaching

在Spring Boot中通過(guò)@EnableCaching注解自動(dòng)化配置合適的緩存管理器(CacheManager),Spring Boot根據(jù)下面的順序去偵測(cè)緩存提供者,也就是說(shuō)Spring Cache支持下面的這些緩存框架:

  • Generic
  • JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others)
  • EhCache 2.x(發(fā)現(xiàn)ehcache的bean,就使用ehcache作為緩存)
  • Hazelcast
  • Infinispan
  • Couchbase
  • Redis
  • Caffeine
  • Simple

yml配置

需要說(shuō)明的是config:classpath:/ehcache.xml可以不用寫(xiě),因?yàn)槟J(rèn)就是這個(gè)路徑。但ehcache.xml必須有。

spring:
  cache:
    type: ehcache
    ehcache:
      config: classpath:/ehcache.xml

在 resources 目錄下,添加 ehcache 的配置文件 ehcache.xml ,文件內(nèi)容如下:

<ehcache>
    <diskStore path="java.io.tmpdir/cache_dongbb"/>
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="false"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
    />
    <cache name="user_detail"
            maxElementsInMemory="10000"
            eternal="true"
            overflowToDisk="true"
            diskPersistent="true"
            diskExpiryThreadIntervalSeconds="600"/>
</ehcache>
conds="600"/>
</ehcache>

配置含義:

  • name:緩存名稱(chēng),與緩存注解的value(cacheNames)屬性值相同。
  • maxElementsInMemory:緩存最大個(gè)數(shù)。
  • eternal:緩存對(duì)象是否永久有效,一但設(shè)置了,timeout將不起作用。
  • timeToIdleSeconds:設(shè)置對(duì)象在失效前的允許閑置時(shí)間(單位:秒)。僅當(dāng)eternal=false對(duì)象不是永久有效時(shí)使用,可選屬性,默認(rèn)值是0,也就是可閑置時(shí)間無(wú)窮大。
  • timeToLiveSeconds:設(shè)置對(duì)象在失效前允許存活時(shí)間(單位:秒)。最大時(shí)間介于創(chuàng)建時(shí)間和失效時(shí)間之間。僅當(dāng)eternal=false對(duì)象不是永久有效時(shí)使用,默認(rèn)是0.,也就是對(duì)象存活時(shí)間無(wú)窮大。
  • overflowToDisk:當(dāng)內(nèi)存中對(duì)象數(shù)量達(dá)到maxElementsInMemory時(shí),Ehcache將會(huì)對(duì)象寫(xiě)到磁盤(pán)中。
  • diskSpoolBufferSizeMB:這個(gè)參數(shù)設(shè)置DiskStore(磁盤(pán)緩存)的緩存區(qū)大小。默認(rèn)是30MB。每個(gè)Cache都應(yīng)該有自己的一個(gè)緩沖區(qū)。
  • maxElementsOnDisk:硬盤(pán)最大緩存?zhèn)€數(shù)。
  • diskPersistent:是否緩存虛擬機(jī)重啟期數(shù)據(jù)。
  • diskExpiryThreadIntervalSeconds:磁盤(pán)失效線(xiàn)程運(yùn)行時(shí)間間隔,默認(rèn)是120秒。
  • memoryStoreEvictionPolicy:當(dāng)達(dá)到maxElementsInMemory限制時(shí),Ehcache將會(huì)根據(jù)指定的策略去清理內(nèi)存。默認(rèn)策略是LRU(最近最少使用)。你可以設(shè)置為FIFO(先進(jìn)先出)或是LFU(較少使用)。
  • clearOnFlush:內(nèi)存數(shù)量最大時(shí)是否清除。
  • diskStore 則表示臨時(shí)緩存的硬盤(pán)目錄。

“java.io.tmpdir”操作系統(tǒng)緩存的臨時(shí)目錄,不同操作系統(tǒng)的緩存臨時(shí)目錄不一樣,在Windows的緩存目錄為C:\\Users\\登錄用戶(hù)~(yú)1\\AppData\\Local\\Temp\\ ; Linux目錄為/tmp

二、緩存的使用方法

緩存的使用方法仍然是Spring Cache的注解,使用方法是一樣的,參考本專(zhuān)欄文章《結(jié)合redis詳述聲明式緩存注解的使用-Cacheable、CacheEvict、CachePut、Caching》。

三、緩存使用中的坑

注意:@Cacheable 注解在對(duì)象內(nèi)部調(diào)用不會(huì)生效。這個(gè)坑不是單獨(dú)針對(duì)EhCache的,只要使用Spring Cache都會(huì)有這個(gè)問(wèn)題。

@Component
public class ClassA   {
    @Override
    public void MethodA(String username)  {
        MethodA1(username);  //緩存失效,@Cacheable 注解在對(duì)象內(nèi)部調(diào)用不會(huì)生效
    }

    @Cacheable(value = USER_DETAIL,key = "#username")
    public void MethodA1(String username) {
       //執(zhí)行方法體
    }
}

原因: Spring 緩存注解是基于Spring AOP切面,必須走代理才能生效,同類(lèi)調(diào)用或者子類(lèi)調(diào)用父類(lèi)帶有緩存注解的方法時(shí)屬于內(nèi)部調(diào)用,沒(méi)有走代理,所以注解不生效。
解決辦法: 將緩存方法,放在一個(gè)單獨(dú)的類(lèi)中

@Component
public class ClassA   {
    @Resource
    ClassB classB;

    @Override
    public void methodA(String username)  {
        classB.methodA1(username);  //緩存失效,@Cacheable 注解在對(duì)象內(nèi)部調(diào)用不會(huì)生效
    }
}
@Component
public class ClassB   {

    @Cacheable(value = USER_DETAIL,key = "#username")
    public void methodA1(String username) {
       //執(zhí)行方法體
    }
}

到此這篇關(guān)于springboot 整合EhCache實(shí)現(xiàn)單服務(wù)緩存的文章就介紹到這了,更多相關(guān)springboot 單服務(wù)緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Convert Kotlin空指針異常的解決方法

    Java Convert Kotlin空指針異常的解決方法

    本文主要介紹了Java?Convert?Kotlin空指針異常的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java cglib動(dòng)態(tài)代理原理分析

    Java cglib動(dòng)態(tài)代理原理分析

    這篇文章主要介紹了Java cglib動(dòng)態(tài)代理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-05-05
  • 淺談Java程序運(yùn)行機(jī)制及錯(cuò)誤分析

    淺談Java程序運(yùn)行機(jī)制及錯(cuò)誤分析

    這篇文章主要主要介紹了Java虛擬機(jī)(JVM)的有關(guān)內(nèi)容以及Java程序的運(yùn)行機(jī)制和錯(cuò)誤分析,需要的朋友可以了解下。
    2017-09-09
  • 如何使用RequestHeaders添加自定義參數(shù)

    如何使用RequestHeaders添加自定義參數(shù)

    這篇文章主要介紹了使用RequestHeaders添加自定義參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-02-02
  • Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

    Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

    緩存是實(shí)際工作中非經(jīng)常常使用的一種提高性能的方法, 我們會(huì)在很多場(chǎng)景下來(lái)使用緩存。下面這篇文章主要給大家介紹了關(guān)于Spring Cache的基本使用與實(shí)現(xiàn)原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • 基于Java類(lèi)的加載方式

    基于Java類(lèi)的加載方式

    這篇文章主要介紹了基于Java類(lèi)的加載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java利用Selenium操作瀏覽器的示例詳解

    Java利用Selenium操作瀏覽器的示例詳解

    本文主要介紹如何使用java代碼利用Selenium操作瀏覽器,某些網(wǎng)頁(yè)元素加載慢,如何操作元素就會(huì)把找不到元素的異常,此時(shí)需要設(shè)置元素等待,等待元素加載完,再操作,感興趣的可以了解一下
    2023-01-01
  • 深入了解Spring中最常用的11個(gè)擴(kuò)展點(diǎn)

    深入了解Spring中最常用的11個(gè)擴(kuò)展點(diǎn)

    我們一說(shuō)到spring,可能第一個(gè)想到的是?IOC(控制反轉(zhuǎn))?和?AOP(面向切面編程)。除此之外,我們?cè)谑褂胹pring的過(guò)程中,有沒(méi)有發(fā)現(xiàn)它的擴(kuò)展能力非常強(qiáng)。今天就來(lái)跟大家一起聊聊,在Spring中最常用的11個(gè)擴(kuò)展點(diǎn)
    2022-09-09
  • Spring多種加載Bean方式解析

    Spring多種加載Bean方式解析

    本篇文章主要介紹了Spring多種加載Bean方式解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • MybatisPlus多表查詢(xún)及分頁(yè)查詢(xún)完整代碼

    MybatisPlus多表查詢(xún)及分頁(yè)查詢(xún)完整代碼

    這篇文章主要介紹了MybatisPlus多表查詢(xún)及分頁(yè)查詢(xún)完整代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08

最新評(píng)論

高州市| 彭山县| 依安县| 和硕县| 固镇县| 襄樊市| 蒙山县| 万全县| 洪泽县| 兰西县| 中卫市| 台东县| 河西区| 江孜县| 古浪县| 凯里市| 南靖县| 寻乌县| 玉环县| 锡林郭勒盟| 射洪县| 昔阳县| 龙陵县| 新化县| 乌什县| 普安县| 常宁市| 宽城| 三门峡市| 扎鲁特旗| 崇礼县| 肇庆市| 浪卡子县| 营山县| 南宫市| 洞头县| 广宗县| 洪洞县| 普陀区| 临潭县| 通渭县|