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

SpringBoot2整合Ehcache組件實現(xiàn)輕量級緩存管理

 更新時間:2021年06月19日 09:58:07   作者:知了一笑  
EhCache是一個純Java的進(jìn)程內(nèi)緩存框架,具有快速、上手簡單等特點(diǎn),是Hibernate中默認(rèn)的緩存提供方。本文講述下SpringBoot2 整合Ehcache組件的步驟

一、Ehcache緩存簡介

Hibernate緩存

Hibernate三級緩存機(jī)制簡介:

一級緩存:基于Session級別分配一塊緩存空間,緩存訪問的對象信息。Session關(guān)閉后會自動清除緩存。

二級緩存:是SessionFactory對象緩存,可以被創(chuàng)建出的多個 Session 對象共享,二級緩存默認(rèn)是關(guān)閉的,如果要使用需要手動開啟,并且依賴EhCache組件。

三級緩存:查詢緩存,配置開啟該緩存的情況下,重復(fù)使用一個sql查詢某個范圍內(nèi)的數(shù)據(jù),會進(jìn)行緩存。

EhCache緩存特點(diǎn)

  • 快速,簡單,并且提供多種緩存策略;
  • 緩存數(shù)據(jù)有兩級:內(nèi)存和磁盤,無需擔(dān)心容量問題;
  • 緩存數(shù)據(jù)會在虛擬機(jī)重啟的過程中寫入磁盤;
  • 可以通過RMI、可插入API等方式進(jìn)行分布式緩存;
  • 具有緩存和緩存管理器的偵聽接口;
  • 支持多緩存管理器實例,以及一個實例的多個緩存區(qū)域;
  • 提供Hibernate的緩存實現(xiàn);

對比Redis緩存

Ehcache:直接在Jvm虛擬機(jī)中緩存,速度快,效率高,不適合處理大規(guī)模緩存數(shù)據(jù),在分布式環(huán)境下,緩存數(shù)據(jù)共享操作復(fù)雜;

Redis:作為獨(dú)立的緩存中間件,在分布式緩存系統(tǒng)中非常好用,緩存數(shù)據(jù)共享,有效支撐大量數(shù)據(jù)緩存,支持哨兵模式,或者集群模式的高可用成熟方案;

二、集成SpringBoot框架

1、核心依賴

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

2、加載配置

基礎(chǔ)配置

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

啟動類注解

@EnableCaching
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args) ;
    }
}

3、配置詳解

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

    <!-- 操作系統(tǒng)緩存的臨時目錄,內(nèi)存滿后寫入該目錄 -->
    <diskStore path="java.io.tmpdir"/>

    <defaultCache
            maxElementsInMemory="1000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </defaultCache>

    <cache name="userEntity"
           maxElementsInMemory="1000"
           eternal="false"
           timeToIdleSeconds="120"
           timeToLiveSeconds="120"
           maxElementsOnDisk="10000000"
           diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </cache>
</ehcache>

配置參數(shù)說明

  • maxElementsOnDisk:磁盤緩存中最多可以存放的元素數(shù)量;
  • eternal:緩存中對象是否永久有效;
  • timeToIdleSeconds:當(dāng)eternal=false時使用,緩存數(shù)據(jù)有效期(單位:秒),時間段內(nèi)沒有訪問該元素,將被清除;
  • timeToLiveSeconds:緩存數(shù)據(jù)的存活時間;
  • maxElementsInMemory:內(nèi)存中最多可以存放的元素數(shù)量,overflowToDisk=true,則會將Cache中多出的元素放入磁盤文件中,若overflowToDisk=false,則根據(jù)memoryStoreEvictionPolicy策略替換Cache中原有的元素;
  • diskExpiryThreadIntervalSeconds:磁盤緩存的清理線程運(yùn)行間隔;
  • memoryStoreEvictionPolicy:緩存釋放策略,LRU會優(yōu)先清理最少使用的緩存;
  • localTempSwap:持久化策略,當(dāng)堆內(nèi)存或者非堆內(nèi)存里面的元素已經(jīng)滿了的時候,將其中的元素臨時的存放在磁盤上,重啟后就會消失;

三、注解用法

@Service
public class CacheService {

    private static final Logger LOGGER = LoggerFactory.getLogger(CacheService.class);

    @Resource
    private UserMapper userMapper ;

    @Cacheable(value="userEntity")  // 在緩存有效期內(nèi),首次查詢才訪問數(shù)據(jù)庫
    public UserEntity getById (Integer id){
        // 通過日志,標(biāo)識方法是否執(zhí)行
        LOGGER.info("getById..."+id);
        return userMapper.selectById(id) ;
    }

    @CacheEvict(value="userEntity",key = "#id") //該ID數(shù)據(jù)更新,清空該ID緩存
    public void updateUser(Integer id) {
        UserEntity user = new UserEntity() ;
        user.setId(id);
        user.setUserName("myCache");
        userMapper.updateById(user);
    }
}

@Cacheable:注解標(biāo)記在一個方法上,也可以標(biāo)記在一個類上,標(biāo)記在一個方法上表示該方法支持緩存,該方法被調(diào)用后將其返回值緩存起來,下次同樣的請求參數(shù)執(zhí)行該方法時可以直接從緩存中獲取結(jié)果,而不需要再次執(zhí)行該方法。

@CacheEvict:注解標(biāo)記在需要清除緩存元素的方法或類上的,當(dāng)標(biāo)記在一個類上時表示其中所有的方法的執(zhí)行都會觸發(fā)緩存的清除操作,并且可以按照指定屬性清除。

四、源代碼地址

GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent

以上就是SpringBoot2整合Ehcache組件實現(xiàn)輕量級緩存管理的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot2 整合Ehcache組件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解

    Java Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解

    這篇文章主要介紹了Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot使用@ControllerAdvice全局異常處理

    SpringBoot使用@ControllerAdvice全局異常處理

    這篇文章主要介紹了SpringBoot使用@ControllerAdvice全局異常處理,異常處理是非常重要的一部分,它可以幫助我們捕獲并處理應(yīng)用程序中出現(xiàn)的異常情況,提高應(yīng)用程序的健壯性和可靠性,需要的朋友可以參考下
    2023-07-07
  • Mybatis-Plus實現(xiàn)SQL攔截器的示例

    Mybatis-Plus實現(xiàn)SQL攔截器的示例

    這篇文章主要介紹了Mybatis-Plus實現(xiàn)一個SQL攔截器,通過使用SQL攔截器,開發(fā)人員可以在執(zhí)行SQL語句之前或之后對其進(jìn)行修改或記錄,從而更好地控制和優(yōu)化數(shù)據(jù)庫操作,對Mybatis-Plus?SQL攔截器相關(guān)知識感興趣的朋友一起看看吧
    2023-05-05
  • springboot yml配置文件使用@project.xxxx@啟動報錯Do not use @ for indentation問題

    springboot yml配置文件使用@project.xxxx@啟動報錯Do not 

    這篇文章主要介紹了springboot yml配置文件使用@project.xxxx@啟動報錯Do not use @ for indentation問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java 讀寫文件[多種方法]

    java 讀寫文件[多種方法]

    前兩天用到讀寫文件的操作,上網(wǎng)搜了一些這方面的資料。很有用的。
    2008-11-11
  • Java concurrency集合之ConcurrentLinkedQueue_動力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency集合之ConcurrentLinkedQueue_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java concurrency集合之ConcurrentLinkedQueue,需要的朋友可以參考下
    2017-06-06
  • java操作時間方式基礎(chǔ)教程demo

    java操作時間方式基礎(chǔ)教程demo

    這篇文章主要為大家介紹了java操作時間方式demo基礎(chǔ)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • java中TestNG使用教程詳解

    java中TestNG使用教程詳解

    TestNG是Java中的一個測試框架, 類似于JUnit 和NUnit, 本文主要介紹了java中TestNG使用教程詳解,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • Java lambda表達(dá)式實現(xiàn)Flink WordCount過程解析

    Java lambda表達(dá)式實現(xiàn)Flink WordCount過程解析

    這篇文章主要介紹了Java lambda表達(dá)式實現(xiàn)Flink WordCount過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java Zip文件讀寫操作詳解

    Java Zip文件讀寫操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java ZipInputstream、ZipOutputStream實現(xiàn)獲取每個文件中的內(nèi)容與寫入內(nèi)容,感興趣的可以動手嘗試一下
    2022-11-11

最新評論

炉霍县| 临湘市| 民丰县| 武汉市| 深水埗区| 确山县| 九龙坡区| 阳泉市| 连城县| 蒙阴县| 新龙县| 绥宁县| 远安县| 江北区| 正安县| 昌宁县| 册亨县| 合川市| 方城县| 大理市| 呈贡县| 桂平市| 桓台县| 泰州市| 天祝| 金寨县| 长泰县| 河间市| 吴忠市| 迭部县| 蓝田县| 云龙县| 宜兰县| 拜城县| 广昌县| 密山市| 静宁县| 富源县| 西乌珠穆沁旗| 梅河口市| 彰化县|