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

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

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

在Spring框架內(nèi)我們首選Spring Cache作為緩存框架的門面,之所以說它是門面,是因為它只提供接口層的定義以及AOP注解等,不提供緩存的具體存取操作。緩存的具體存儲還需要具體的緩存存儲,比如EhCache 、Redis等。Spring Cache與緩存框架的關(guān)系有點像SLF4j與logback、log4j的關(guān)系。

在這里插入圖片描述

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

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

一、整合Spring Cache 與Ehcache

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

第一步:pom.xml 添加 Spring cache 和 Ehcache的 jar 依賴:

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

第二步:添加入口啟動類 @EnableCaching 注解開啟 Caching,實例如下。

@EnableCaching

在Spring Boot中通過@EnableCaching注解自動化配置合適的緩存管理器(CacheManager),Spring Boot根據(jù)下面的順序去偵測緩存提供者,也就是說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配置

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

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

二、緩存的使用方法

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

三、緩存使用中的坑

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

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

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

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

@Component
public class ClassA   {
    @Resource
    ClassB classB;

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

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

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

相關(guān)文章

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

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

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

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

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

    淺談Java程序運行機制及錯誤分析

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

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

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

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

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

    基于Java類的加載方式

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

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

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

    深入了解Spring中最常用的11個擴展點

    我們一說到spring,可能第一個想到的是?IOC(控制反轉(zhuǎn))?和?AOP(面向切面編程)。除此之外,我們在使用spring的過程中,有沒有發(fā)現(xiàn)它的擴展能力非常強。今天就來跟大家一起聊聊,在Spring中最常用的11個擴展點
    2022-09-09
  • Spring多種加載Bean方式解析

    Spring多種加載Bean方式解析

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

    MybatisPlus多表查詢及分頁查詢完整代碼

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

最新評論

永昌县| 铁岭市| SHOW| 驻马店市| 都安| 梁山县| 麻栗坡县| 临颍县| 阿克陶县| 鹿泉市| 手游| 水富县| 沙田区| 和静县| 南宫市| 华坪县| 晋江市| 镇原县| 玉屏| 扬中市| 邯郸县| 临桂县| 鄄城县| 施甸县| 宁远县| 广水市| 滁州市| 旅游| 鹰潭市| 边坝县| 阳高县| 临海市| 兴义市| 扶余县| 高青县| 汝城县| 南华县| 楚雄市| 波密县| 米易县| 宁明县|