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

SpringBoot中整合Ehcache實(shí)現(xiàn)熱點(diǎn)數(shù)據(jù)緩存的詳細(xì)過程

 更新時(shí)間:2023年04月10日 11:09:39   作者:菜鳥是大神  
這篇文章主要介紹了SpringBoot中整合Ehcache實(shí)現(xiàn)熱點(diǎn)數(shù)據(jù)緩存,SpringBoot 中使用 Ehcache 比較簡(jiǎn)單,只需要簡(jiǎn)單配置,說白了還是 Spring Cache 的用法,合理使用緩存機(jī)制,可以很好地提高項(xiàng)目的響應(yīng)速度,需要的朋友可以參考下

EhCache 是一個(gè)純 Java 的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是 Hibernate 中默認(rèn)的 CacheProvider。用慣了 Redis,很多人可能已經(jīng)忘記了還有 EhCache 這么一個(gè)緩存框架

一、簡(jiǎn)介

EhCache 是一個(gè)純 Java 的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是 Hibernate 中默認(rèn)CacheProvider。Ehcache 是一種廣泛使用的開源 Java 分布式緩存。主要面向通用緩存,Java EE 和輕量級(jí)容器。它具有內(nèi)存和磁盤存儲(chǔ),緩存加載器,緩存擴(kuò)展,緩存異常處理程序,一個(gè) gzip 緩存 servlet 過濾器,支持 REST 和 SOAP api 等特點(diǎn)。

特性
快速、簡(jiǎn)單
多種緩存策略
緩存數(shù)據(jù)有兩級(jí):內(nèi)存和磁盤,因此無需擔(dān)心容量問題
緩存數(shù)據(jù)會(huì)在虛擬機(jī)重啟的過程中寫入磁盤
可以通過RMI、可插入API等方式進(jìn)行分布式緩存
具有緩存和緩存管理器的偵聽接口
支持多緩存管理器實(shí)例,以及一個(gè)實(shí)例的多個(gè)緩存區(qū)域
提供Hibernate的緩存實(shí)現(xiàn)
與 Redis 相比
EhCache 直接在jvm虛擬機(jī)中緩存,速度快,效率高;但是緩存共享麻煩,集群分布式應(yīng)用不方便。
Redis 是通過 Socket 訪問到緩存服務(wù),效率比 EhCache 低,比數(shù)據(jù)庫要快很多,處理集群和分布式緩存方便,有成熟的方案。如果是單個(gè)應(yīng)用或者對(duì)緩存訪問要求很高的應(yīng)用,用 EhCache 。如果是大型系統(tǒng),存在緩存共享、分布式部署、緩存內(nèi)容很大的,建議用 Redis。
EhCache 也有緩存共享方案,不過是通過 RMI 或者 Jgroup 多播方式進(jìn)行廣播緩存通知更新,緩存共享復(fù)雜,維護(hù)不方便;簡(jiǎn)單的共享可以,但是涉及到緩存恢復(fù),大數(shù)據(jù)緩存,則不合適。

二、引入 EhCache

1、引入依賴

在 pom.xml 文件中,引入 Ehcache 的依賴信息

<!-- ehcache依賴 -->
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.10.6</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

2、配置文件

創(chuàng)建 EhCache 的配置文件:ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
 
    <!--
        磁盤存儲(chǔ):將緩存中暫時(shí)不使用的對(duì)象,轉(zhuǎn)移到硬盤,類似于Windows系統(tǒng)的虛擬內(nèi)存
        path:指定在硬盤上存儲(chǔ)對(duì)象的路徑
        path可以配置的目錄有:
        user.home(用戶的家目錄)
        user.dir(用戶當(dāng)前的工作目錄)
        java.io.tmpdir(默認(rèn)的臨時(shí)目錄)
        ehcache.disk.store.dir(ehcache的配置目錄)
        絕對(duì)路徑(如:d:\\ehcache)
        查看路徑方法:String tmpDir = System.getProperty("java.io.tmpdir");
     -->
    <diskStore path="java.io.tmpdir" />
 
    <!--
        defaultCache:默認(rèn)的緩存配置信息,如果不加特殊說明,則所有對(duì)象按照此配置項(xiàng)處理
        maxElementsInMemory:設(shè)置了緩存的上限,最多存儲(chǔ)多少個(gè)記錄對(duì)象
        eternal:代表對(duì)象是否永不過期 (指定true則下面兩項(xiàng)配置需為0無限期)
        timeToIdleSeconds:最大的發(fā)呆時(shí)間 /秒
        timeToLiveSeconds:最大的存活時(shí)間 /秒
        overflowToDisk:是否允許對(duì)象被寫入到磁盤
        說明:下列配置自緩存建立起600秒(10分鐘)有效 。
        在有效的600秒(10分鐘)內(nèi),如果連續(xù)120秒(2分鐘)未訪問緩存,則緩存失效。
        就算有訪問,也只會(huì)存活600秒。
     -->
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600"
                  timeToLiveSeconds="600" overflowToDisk="true" />
 
    <!--
        maxElementsInMemory,內(nèi)存緩存中最多可以存放的元素?cái)?shù)量,若放入Cache中的元素超過這個(gè)數(shù)值,則有以下兩種情況
                            1)若overflowToDisk=true,則會(huì)將Cache中多出的元素放入磁盤文件中
                            2)若overflowToDisk=false,則根據(jù)memoryStoreEvictionPolicy策略替換Cache中原有的元素
        eternal,            緩存中對(duì)象是否永久有效
        timeToIdleSeconds,  緩存數(shù)據(jù)在失效前的允許閑置時(shí)間(單位:秒),僅當(dāng)eternal=false時(shí)使用,默認(rèn)值是0表示可閑置時(shí)間無窮大,若超過這個(gè)時(shí)間沒有訪問此Cache中的某個(gè)元素,那么此元素將被從Cache中清除
        timeToLiveSeconds,  緩存數(shù)據(jù)的總的存活時(shí)間(單位:秒),僅當(dāng)eternal=false時(shí)使用,從創(chuàng)建開始計(jì)時(shí),失效結(jié)束
        maxElementsOnDisk,  磁盤緩存中最多可以存放的元素?cái)?shù)量,0表示無窮大
        overflowToDisk,     內(nèi)存不足時(shí),是否啟用磁盤緩存
        diskExpiryThreadIntervalSeconds,    磁盤緩存的清理線程運(yùn)行間隔,默認(rèn)是120秒
        memoryStoreEvictionPolicy,  內(nèi)存存儲(chǔ)與釋放策略,即達(dá)到maxElementsInMemory限制時(shí),Ehcache會(huì)根據(jù)指定策略清理內(nèi)存  共有三種策略,分別為L(zhǎng)RU(最近最少使用)、LFU(最常用的)、FIFO(先進(jìn)先出)
    -->
    <cache name="user" 
    	maxElementsInMemory="10000" 
    	eternal="false" 
    	timeToIdleSeconds="120" 
    	timeToLiveSeconds="120" 
    	maxElementsOnDisk="10000000" 
    	overflowToDisk="true" 
    	memoryStoreEvictionPolicy="LRU" />
 
</ehcache>

<cache name="user"></cache>,我們是可以配置多個(gè)來解決我們不同業(yè)務(wù)處所需要的緩存策略的

默認(rèn)情況下,EhCache 的配置文件名是固定的,ehcache.xml,如果需要更改文件名,需要在 application.yml 文件中指定配置文件位置,如:

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

指定了 EhCache 的配置文件位置

3、開啟緩存

開啟緩存的方式,也和 Redis 中一樣,在啟動(dòng)類上添加 @EnableCaching 注解即可:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@SpringBootApplication
@EnableCaching
public class SbmApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SbmApplication.class, args);
    }
}

三、開始使用

1、@CacheConfig

這個(gè)注解在類上使用,用來描述該類中所有方法使用的緩存名稱,當(dāng)然也可以不使用該注解,直接在具體的緩存注解上配置名稱,示例代碼如下:

@Service
@CacheConfig(cacheNames = "user")
public class UserServiceImpl implements UserService {
 
}

2、@Cacheable

這個(gè)注解一般加在查詢方法上,表示將一個(gè)方法的返回值緩存起來,默認(rèn)情況下,緩存的 key 就是方法的參數(shù),緩存的 value 就是方法的返回值。示例代碼如下:

@Override
@Cacheable(value = "user", key = "#id")
public User getUserById(Long id) {
    return userMapper.getUserById(id);
}

如果在類上沒有加入 @CacheConfig,我們則需要使用 value 來指定緩存名稱
這里如果需要多個(gè) key 時(shí),需要使用 “:” 來連接,如:

@Cacheable(value = "user", key = "#name+':'+#phone")

3、@CachePut

這個(gè)注解一般加在更新方法上,當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)更新后,緩存中的數(shù)據(jù)也要跟著更新,使用該注解,可以將方法的返回值自動(dòng)更新到已經(jīng)存在的 key 上,示例代碼如下:

@Override
@CachePut(value = "user", key = "#id")
public User updateUserById(User user) {
    return userMapper.updateUserById(user);
}

4、@CacheEvict

這個(gè)注解一般加在刪除方法上,當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)刪除后,相關(guān)的緩存數(shù)據(jù)也要自動(dòng)清除,該注解在使用的時(shí)候也可以配置按照某種條件刪除( condition 屬性)或者或者配置清除所有緩存( allEntries 屬性),示例代碼如下:

@Override
@CacheEvict(value = "user", key = "#id")
public void deleteUserById(Long id) {
    userMapper.deleteUserById(id);
}

四、總結(jié)

SpringBoot 中使用 Ehcache 比較簡(jiǎn)單,只需要簡(jiǎn)單配置,說白了還是 Spring Cache 的用法,合理使用緩存機(jī)制,可以很好地提高項(xiàng)目的響應(yīng)速度。

到此這篇關(guān)于SpringBoot中整合Ehcache實(shí)現(xiàn)熱點(diǎn)數(shù)據(jù)緩存的詳細(xì)過程的文章就介紹到這了,更多相關(guān)SpringBoot整合Ehcache緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring boot整合Mybatis-plus過程解析

    Spring boot整合Mybatis-plus過程解析

    這篇文章主要介紹了Spring boot整合Mybatis-plus過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java創(chuàng)建多線程異步執(zhí)行實(shí)現(xiàn)代碼解析

    Java創(chuàng)建多線程異步執(zhí)行實(shí)現(xiàn)代碼解析

    這篇文章主要介紹了Java創(chuàng)建多線程異步執(zhí)行實(shí)現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java面試題沖刺第三天--集合框架篇

    Java面試題沖刺第三天--集合框架篇

    這篇文章主要為大家分享了最有價(jià)值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java多線程并發(fā)的指令重排序問題及volatile寫屏障原理詳解

    Java多線程并發(fā)的指令重排序問題及volatile寫屏障原理詳解

    這篇文章主要介紹了Java多線程并發(fā)的指令重排序問題及volatile寫屏障原理詳解,指令重排序是編譯器或處理器為了提高性能而對(duì)指令執(zhí)行順序進(jìn)行重新排列的優(yōu)化技術(shù),需要的朋友可以參考下
    2024-01-01
  • java FileOutputStream輸出流的使用解讀

    java FileOutputStream輸出流的使用解讀

    這篇文章主要介紹了java FileOutputStream輸出流的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 在Spring框架下配置Quartz集群的詳細(xì)步驟(MySQL數(shù)據(jù)源)

    在Spring框架下配置Quartz集群的詳細(xì)步驟(MySQL數(shù)據(jù)源)

    Quartz 是一個(gè)功能強(qiáng)大的調(diào)度庫,可以在 Java 應(yīng)用中用于執(zhí)行定時(shí)任務(wù),本文將介紹如何在 Spring 框架下配置 Quartz 集群,并使用 MySQL 作為數(shù)據(jù)源來存儲(chǔ)調(diào)度信息,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下
    2025-01-01
  • mybatis中xml之trim屬性說明

    mybatis中xml之trim屬性說明

    這篇文章主要介紹了mybatis中xml之trim屬性說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springboot時(shí)間格式化的五種方法總結(jié)(解決后端傳給前端的時(shí)間顯示不一致)

    springboot時(shí)間格式化的五種方法總結(jié)(解決后端傳給前端的時(shí)間顯示不一致)

    這篇文章主要給大家介紹了關(guān)于springboot時(shí)間格式化的五種方法,文中介紹的方法解決了后端傳給前端的時(shí)間顯示不一致,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • SpringBoot實(shí)現(xiàn)單文件上傳

    SpringBoot實(shí)現(xiàn)單文件上傳

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)單文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 基于spring+hibernate+JQuery開發(fā)之電子相冊(cè)(附源碼下載)

    基于spring+hibernate+JQuery開發(fā)之電子相冊(cè)(附源碼下載)

    本篇文章介紹了,基于spring+hibernate+JQuery開發(fā)之電子相冊(cè)(附源碼下載)。需要的朋友參考下
    2013-05-05

最新評(píng)論

民县| 阳朔县| 阜阳市| 蒙阴县| 嘉黎县| 和政县| 历史| 石景山区| 肥西县| 绥棱县| 上虞市| 萍乡市| 泗阳县| 宜丰县| 吕梁市| 含山县| 牡丹江市| 鄂伦春自治旗| 绥德县| 台中县| 云安县| 武乡县| 山东省| 肇东市| 天镇县| 远安县| 额尔古纳市| 互助| 阳山县| 德钦县| 五指山市| 寿阳县| 巴东县| 茌平县| 澄城县| 宁强县| 南溪县| 安远县| 麟游县| 青岛市| 大足县|