欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理的原理解析

 更新時(shí)間:2020年08月10日 08:40:31   作者:知了一笑  
這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

一、Ehcache緩存簡(jiǎn)介

1、基礎(chǔ)簡(jiǎn)介

EhCache是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、上手簡(jiǎn)單等特點(diǎn),是Hibernate中默認(rèn)的緩存提供方。

2、Hibernate緩存

Hibernate三級(jí)緩存機(jī)制簡(jiǎn)介:

一級(jí)緩存:基于Session級(jí)別分配一塊緩存空間,緩存訪問(wèn)的對(duì)象信息。Session關(guān)閉后會(huì)自動(dòng)清除緩存。

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

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

3、EhCache緩存特點(diǎn)

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

4、對(duì)比Redis緩存

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

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

二、集成SpringBoot框架

1、核心依賴(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>

2、加載配置

基礎(chǔ)配置

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

啟動(dòng)類(lèi)注解

@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)緩存的臨時(shí)目錄,內(nèi)存滿(mǎn)后寫(xiě)入該目錄 -->
 <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ù)說(shuō)明

maxElementsOnDisk:磁盤(pán)緩存中最多可以存放的元素?cái)?shù)量;

eternal:緩存中對(duì)象是否永久有效;

timeToIdleSeconds:當(dāng)eternal=false時(shí)使用,緩存數(shù)據(jù)有效期(單位:秒),時(shí)間段內(nèi)沒(méi)有訪問(wèn)該元素,將被清除;

timeToLiveSeconds:緩存數(shù)據(jù)的存活時(shí)間;

maxElementsInMemory:內(nèi)存中最多可以存放的元素?cái)?shù)量,overflowToDisk=true,則會(huì)將Cache中多出的元素放入磁盤(pán)文件中,若overflowToDisk=false,則根據(jù)memoryStoreEvictionPolicy策略替換Cache中原有的元素;

diskExpiryThreadIntervalSeconds:磁盤(pán)緩存的清理線程運(yùn)行間隔;

memoryStoreEvictionPolicy:緩存釋放策略,LRU會(huì)優(yōu)先清理最少使用的緩存;

localTempSwap:持久化策略,當(dāng)堆內(nèi)存或者非堆內(nèi)存里面的元素已經(jīng)滿(mǎn)了的時(shí)候,將其中的元素臨時(shí)的存放在磁盤(pán)上,重啟后就會(huì)消失;

三、注解用法

@Service
public class CacheService {

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

 @Resource
 private UserMapper userMapper ;

 @Cacheable(value="userEntity") // 在緩存有效期內(nèi),首次查詢(xún)才訪問(wèn)數(shù)據(jù)庫(kù)
 public UserEntity getById (Integer id){
  // 通過(guò)日志,標(biāo)識(shí)方法是否執(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)記在一個(gè)方法上,也可以標(biāo)記在一個(gè)類(lèi)上,標(biāo)記在一個(gè)方法上表示該方法支持緩存,該方法被調(diào)用后將其返回值緩存起來(lái),下次同樣的請(qǐng)求參數(shù)執(zhí)行該方法時(shí)可以直接從緩存中獲取結(jié)果,而不需要再次執(zhí)行該方法。

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

四、源代碼地址

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

到此這篇關(guān)于SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理的文章就介紹到這了,更多相關(guān)SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaMail實(shí)現(xiàn)發(fā)送郵件(QQ郵箱)

    JavaMail實(shí)現(xiàn)發(fā)送郵件(QQ郵箱)

    這篇文章主要為大家詳細(xì)介紹了JavaMail實(shí)現(xiàn)發(fā)送郵件(QQ郵箱),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • SpringBoot+Vue中的Token續(xù)簽機(jī)制

    SpringBoot+Vue中的Token續(xù)簽機(jī)制

    本文主要介紹了SpringBoot+Vue中的Token續(xù)簽機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Spring啟動(dòng)時(shí)實(shí)現(xiàn)初始化有哪些方式?

    Spring啟動(dòng)時(shí)實(shí)現(xiàn)初始化有哪些方式?

    今天給大家?guī)?lái)的文章是關(guān)于Spring的相關(guān)知識(shí),文章圍繞著Spring啟動(dòng)時(shí)實(shí)現(xiàn)初始化有哪些方式展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Spring Cloud Alibaba Nacos Config加載配置詳解流程

    Spring Cloud Alibaba Nacos Config加載配置詳解流

    這篇文章主要介紹了Spring Cloud Alibaba Nacos Config配置中心實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • SpringBoot如何打包自定義生成的包名

    SpringBoot如何打包自定義生成的包名

    這篇文章主要介紹了SpringBoot如何打包自定義生成的包名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Springboot2.0配置JPA多數(shù)據(jù)源連接兩個(gè)mysql數(shù)據(jù)庫(kù)方式

    Springboot2.0配置JPA多數(shù)據(jù)源連接兩個(gè)mysql數(shù)據(jù)庫(kù)方式

    這篇文章主要介紹了Springboot2.0配置JPA多數(shù)據(jù)源連接兩個(gè)mysql數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java大話之創(chuàng)建型設(shè)計(jì)模式教程示例

    java大話之創(chuàng)建型設(shè)計(jì)模式教程示例

    這篇文章主要為大家介紹了java大話之創(chuàng)建型設(shè)計(jì)模式教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • MyBatis自定義typeHandler的完整實(shí)例

    MyBatis自定義typeHandler的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于MyBatis自定義typeHandler的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java線程間共享與協(xié)作詳細(xì)介紹

    Java線程間共享與協(xié)作詳細(xì)介紹

    這篇文章主要介紹了Java線程間共享與協(xié)作詳細(xì)介紹,Java?支持多個(gè)線程同時(shí)訪問(wèn)一個(gè)對(duì)象或者對(duì)象的成員變量,更多相關(guān)介紹需要的朋友可以參考一下
    2022-09-09
  • 使用Java手搓一個(gè)控制臺(tái)進(jìn)度條打印工具

    使用Java手搓一個(gè)控制臺(tái)進(jìn)度條打印工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Java手搓一個(gè)控制臺(tái)進(jìn)度條打印工具,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04

最新評(píng)論