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

SpringBoot中使用Ehcache的詳細教程

 更新時間:2020年08月17日 15:05:47   作者:Asurplus、  
EhCache 是一個純 Java 的進程內(nèi)緩存框架,具有快速、精干等特點,是 Hibernate 中默認的 CacheProvider。這篇文章主要介紹了SpringBoot中使用Ehcache的相關(guān)知識,需要的朋友可以參考下

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

一、簡介

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

特性

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

與 Redis 相比

  • EhCache 直接在jvm虛擬機中緩存,速度快,效率高;但是緩存共享麻煩,集群分布式應(yīng)用不方便。
  • Redis 是通過 Socket 訪問到緩存服務(wù),效率比 EhCache 低,比數(shù)據(jù)庫要快很多,處理集群和分布式緩存方便,有成熟的方案。如果是單個應(yīng)用或者對緩存訪問要求很高的應(yīng)用,用 EhCache 。如果是大型系統(tǒng),存在緩存共享、分布式部署、緩存內(nèi)容很大的,建議用 Redis。
  • EhCache 也有緩存共享方案,不過是通過 RMI 或者 Jgroup 多播方式進行廣播緩存通知更新,緩存共享復雜,維護不方便;簡單的共享可以,但是涉及到緩存恢復,大數(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(用戶當前的工作目錄)
  java.io.tmpdir(默認的臨時目錄)
  ehcache.disk.store.dir(ehcache的配置目錄)
  絕對路徑(如:d:\\ehcache)
  查看路徑方法:String tmpDir = System.getProperty("java.io.tmpdir");
  -->
 <diskStore path="java.io.tmpdir" />

 <!--
  defaultCache:默認的緩存配置信息,如果不加特殊說明,則所有對象按照此配置項處理
  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ù)在失效前的允許閑置時間(單位:秒),僅當eternal=false時使用,默認值是0表示可閑置時間無窮大,若超過這個時間沒有訪問此Cache中的某個元素,那么此元素將被從Cache中清除
  timeToLiveSeconds, 緩存數(shù)據(jù)的總的存活時間(單位:秒),僅當eternal=false時使用,從創(chuàng)建開始計時,失效結(jié)束
  maxElementsOnDisk, 磁盤緩存中最多可以存放的元素數(shù)量,0表示無窮大
  overflowToDisk,  內(nèi)存不足時,是否啟用磁盤緩存
  diskExpiryThreadIntervalSeconds, 磁盤緩存的清理線程運行間隔,默認是120秒
  memoryStoreEvictionPolicy, 內(nèi)存存儲與釋放策略,即達到maxElementsInMemory限制時,Ehcache會根據(jù)指定策略清理內(nèi)存 共有三種策略,分別為LRU(最近最少使用)、LFU(最常用的)、FIFO(先進先出)
 -->
 <cache name="user" 
 	maxElementsInMemory="10000" 
 	eternal="false" 
 	timeToIdleSeconds="120" 
 	timeToLiveSeconds="120" 
 	maxElementsOnDisk="10000000" 
 	overflowToDisk="true" 
 	memoryStoreEvictionPolicy="LRU" />

</ehcache>

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

默認情況下,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

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

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

}

2、@Cacheable

這個注解一般加在查詢方法上,表示將一個方法的返回值緩存起來,默認情況下,緩存的 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

這個注解一般加在更新方法上,當數(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

這個注解一般加在刪除方法上,當數(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 的用法,合理使用緩存機制,可以很好地提高項目的響應(yīng)速度。

到此這篇關(guān)于SpringBoot中使用Ehcache的文章就介紹到這了,更多相關(guān)SpringBoot使用Ehcache內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java ArrayList中存放引用數(shù)據(jù)類型的方式

    Java ArrayList中存放引用數(shù)據(jù)類型的方式

    這篇文章主要介紹了Java ArrayList中存放引用數(shù)據(jù)類型的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • restTemplate超時處理的策略方案

    restTemplate超時處理的策略方案

    這篇文章主要為大家介紹了restTemplate超時處理的策略方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • netty中的IO、NIO、AIO使用詳解

    netty中的IO、NIO、AIO使用詳解

    這篇文章主要介紹了netty中的IO、NIO、AIO使用詳解,本文會說明各種IO的特點、分別解決了什么樣的問題做一個分析闡述,并結(jié)合Java代碼例子來輔助理解,像這些的歷史演進和詳細的底層原理網(wǎng)上很多,所以我們只站在應(yīng)用層,使用者的角度去分析,需要的朋友可以參考下
    2023-12-12
  • Java 邏輯控制全面詳解

    Java 邏輯控制全面詳解

    程序的邏輯主要分為三種結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),順序結(jié)構(gòu)的所有的代碼都是從前向后執(zhí)行的。有些時候順序是由“{}”為界限的,下文將全面詳細的介紹
    2021-10-10
  • 使用Swagger2實現(xiàn)自動生成RESTful?API文檔

    使用Swagger2實現(xiàn)自動生成RESTful?API文檔

    在開發(fā)?RESTful?API?的過程中,文檔是非常重要的一部分,可以幫助開發(fā)者了解?API?的功能和使用方法,本文將使用Swagger2?實現(xiàn)自動生成?RESTful?API?文檔,需要的可以參考一下
    2023-06-06
  • Java實現(xiàn)讀取文章中重復出現(xiàn)的中文字符串

    Java實現(xiàn)讀取文章中重復出現(xiàn)的中文字符串

    本文主要介紹了Java實現(xiàn)讀取文章中重復出現(xiàn)的中文字符串的方法。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Java中的StringTokenizer實現(xiàn)字符串切割詳解

    Java中的StringTokenizer實現(xiàn)字符串切割詳解

    這篇文章主要介紹了Java中的StringTokenizer實現(xiàn)字符串切割詳解,java.util工具包提供了字符串切割的工具類StringTokenizer,Spring等常見框架的字符串工具類(如Spring的StringUtils),需要的朋友可以參考下
    2024-01-01
  • spring boot項目如何采用war在tomcat容器中運行

    spring boot項目如何采用war在tomcat容器中運行

    這篇文章主要介紹了spring boot項目如何采用war在tomcat容器中運行呢,主要講述將SpringBoot打成war包并放入tomcat中運行的方法分享,需要的朋友可以參考下
    2022-11-11
  • 基于 SASL/SCRAM 讓 Kafka 實現(xiàn)動態(tài)授權(quán)認證的方法

    基于 SASL/SCRAM 讓 Kafka 實現(xiàn)動態(tài)授權(quán)認證的方法

    在大數(shù)據(jù)處理和分析中?Apache Kafka?已經(jīng)成為了一個核心組件,本文將從零開始部署?ZooKeeper?和?Kafka?并通過配置?SASL/SCRAM?和?ACL(訪問控制列表)來增強?Kafka?的安全性,需要的朋友可以參考下
    2024-07-07
  • Java 類型信息詳解和反射機制介紹

    Java 類型信息詳解和反射機制介紹

    這篇文章主要介紹了Java 類型信息詳解和反射機制介紹,需要的朋友可以參考下
    2020-11-11

最新評論