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

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

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

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

一、簡介

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

特性
快速、簡單
多種緩存策略
緩存數(shù)據(jù)有兩級:內(nèi)存和磁盤,因此無需擔(dān)心容量問題
緩存數(shù)據(jù)會在虛擬機(jī)重啟的過程中寫入磁盤
可以通過RMI、可插入API等方式進(jìn)行分布式緩存
具有緩存和緩存管理器的偵聽接口
支持多緩存管理器實例,以及一個實例的多個緩存區(qū)域
提供Hibernate的緩存實現(xiàn)
與 Redis 相比
EhCache 直接在jvm虛擬機(jī)中緩存,速度快,效率高;但是緩存共享麻煩,集群分布式應(yīng)用不方便。
Redis 是通過 Socket 訪問到緩存服務(wù),效率比 EhCache 低,比數(shù)據(jù)庫要快很多,處理集群和分布式緩存方便,有成熟的方案。如果是單個應(yīng)用或者對緩存訪問要求很高的應(yīng)用,用 EhCache 。如果是大型系統(tǒng),存在緩存共享、分布式部署、緩存內(nèi)容很大的,建議用 Redis。
EhCache 也有緩存共享方案,不過是通過 RMI 或者 Jgroup 多播方式進(jìn)行廣播緩存通知更新,緩存共享復(fù)雜,維護(hù)不方便;簡單的共享可以,但是涉及到緩存恢復(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">
 
    <!--
        磁盤存儲:將緩存中暫時不使用的對象,轉(zhuǎn)移到硬盤,類似于Windows系統(tǒng)的虛擬內(nèi)存
        path:指定在硬盤上存儲對象的路徑
        path可以配置的目錄有:
        user.home(用戶的家目錄)
        user.dir(用戶當(dāng)前的工作目錄)
        java.io.tmpdir(默認(rèn)的臨時目錄)
        ehcache.disk.store.dir(ehcache的配置目錄)
        絕對路徑(如:d:\\ehcache)
        查看路徑方法:String tmpDir = System.getProperty("java.io.tmpdir");
     -->
    <diskStore path="java.io.tmpdir" />
 
    <!--
        defaultCache:默認(rèn)的緩存配置信息,如果不加特殊說明,則所有對象按照此配置項處理
        maxElementsInMemory:設(shè)置了緩存的上限,最多存儲多少個記錄對象
        eternal:代表對象是否永不過期 (指定true則下面兩項配置需為0無限期)
        timeToIdleSeconds:最大的發(fā)呆時間 /秒
        timeToLiveSeconds:最大的存活時間 /秒
        overflowToDisk:是否允許對象被寫入到磁盤
        說明:下列配置自緩存建立起600秒(10分鐘)有效 。
        在有效的600秒(10分鐘)內(nèi),如果連續(xù)120秒(2分鐘)未訪問緩存,則緩存失效。
        就算有訪問,也只會存活600秒。
     -->
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600"
                  timeToLiveSeconds="600" overflowToDisk="true" />
 
    <!--
        maxElementsInMemory,內(nèi)存緩存中最多可以存放的元素數(shù)量,若放入Cache中的元素超過這個數(shù)值,則有以下兩種情況
                            1)若overflowToDisk=true,則會將Cache中多出的元素放入磁盤文件中
                            2)若overflowToDisk=false,則根據(jù)memoryStoreEvictionPolicy策略替換Cache中原有的元素
        eternal,            緩存中對象是否永久有效
        timeToIdleSeconds,  緩存數(shù)據(jù)在失效前的允許閑置時間(單位:秒),僅當(dāng)eternal=false時使用,默認(rèn)值是0表示可閑置時間無窮大,若超過這個時間沒有訪問此Cache中的某個元素,那么此元素將被從Cache中清除
        timeToLiveSeconds,  緩存數(shù)據(jù)的總的存活時間(單位:秒),僅當(dāng)eternal=false時使用,從創(chuàng)建開始計時,失效結(jié)束
        maxElementsOnDisk,  磁盤緩存中最多可以存放的元素數(shù)量,0表示無窮大
        overflowToDisk,     內(nèi)存不足時,是否啟用磁盤緩存
        diskExpiryThreadIntervalSeconds,    磁盤緩存的清理線程運(yùn)行間隔,默認(rèn)是120秒
        memoryStoreEvictionPolicy,  內(nèi)存存儲與釋放策略,即達(dá)到maxElementsInMemory限制時,Ehcache會根據(jù)指定策略清理內(nèi)存  共有三種策略,分別為LRU(最近最少使用)、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>,我們是可以配置多個來解決我們不同業(yè)務(wù)處所需要的緩存策略的

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

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

指定了 EhCache 的配置文件位置

3、開啟緩存

開啟緩存的方式,也和 Redis 中一樣,在啟動類上添加 @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

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

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

2、@Cacheable

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

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

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

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

3、@CachePut

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

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

4、@CacheEvict

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

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

四、總結(jié)

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

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

相關(guān)文章

  • Mybatis choose when用法實例代碼

    Mybatis choose when用法實例代碼

    本文通過實例代碼給大家介紹了Mybatis choose when用法,需要的的朋友參考下吧
    2017-06-06
  • java使用CollectionUtils工具類判斷集合是否為空方式

    java使用CollectionUtils工具類判斷集合是否為空方式

    這篇文章主要介紹了java使用CollectionUtils工具類判斷集合是否為空方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Springboot中實現(xiàn)策略模式+工廠模式的方法

    Springboot中實現(xiàn)策略模式+工廠模式的方法

    這篇文章主要介紹了Springboot中實現(xiàn)策略模式+工廠模式,具體策略模式和工廠模式的UML我就不給出來了,使用這個這兩個模式主要是防止程序中出現(xiàn)大量的IF ELSE IF ELSE....,接下來咱們直接實現(xiàn)Springboot策略模式工廠模式
    2022-03-03
  • 詳解SpringBoot如何刪除引用jar包中的無用bean

    詳解SpringBoot如何刪除引用jar包中的無用bean

    為了趕速度和直接將之前多模塊的maven項目中的部分模塊,直接以jar包的形式引入到新項目中了,雖然省去了不少開發(fā)時間,導(dǎo)致項目臃腫,啟動很慢。本文將用@ComponentScan注解去實現(xiàn)讓項目只加載自己需要的bean,需要的可以參考一下
    2022-06-06
  • Spring使用注解進(jìn)行對象注入的示例詳解

    Spring使用注解進(jìn)行對象注入的示例詳解

    獲取?Bean?對象也叫做對象裝配,就是把對象取出來放到某個類中,有時候也叫對象注入,常見有關(guān)對象注入的注解有兩個,一個是@Autowired,另外一個是@Resource,下面就來講講它們的具體使用吧
    2023-07-07
  • Android 判斷真機(jī)和模擬器的方法

    Android 判斷真機(jī)和模擬器的方法

    這篇文章主要介紹了 Android 判斷真機(jī)和模擬器的方法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Maven引用自定義jar包方式

    Maven引用自定義jar包方式

    這篇文章主要介紹了Maven引用自定義jar包方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot?自定義注解之脫敏注解詳解

    SpringBoot?自定義注解之脫敏注解詳解

    這篇文章主要介紹了SpringBoot?自定義注解之脫敏注解詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springBoot+webMagic實現(xiàn)網(wǎng)站爬蟲的實例代碼

    springBoot+webMagic實現(xiàn)網(wǎng)站爬蟲的實例代碼

    這篇文章主要介紹了springBoot+webMagic實現(xiàn)網(wǎng)站爬蟲的實例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Spring Boot系列教程之日志配置

    Spring Boot系列教程之日志配置

    這篇文章主要給大家介紹了關(guān)于Spring Boot系列教程之日志配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評論