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

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

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

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

一、簡介

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

特性
快速、簡單
多種緩存策略
緩存數(shù)據(jù)有兩級:內存和磁盤,因此無需擔心容量問題
緩存數(shù)據(jù)會在虛擬機重啟的過程中寫入磁盤
可以通過RMI、可插入API等方式進行分布式緩存
具有緩存和緩存管理器的偵聽接口
支持多緩存管理器實例,以及一個實例的多個緩存區(qū)域
提供Hibernate的緩存實現(xiàn)
與 Redis 相比
EhCache 直接在jvm虛擬機中緩存,速度快,效率高;但是緩存共享麻煩,集群分布式應用不方便。
Redis 是通過 Socket 訪問到緩存服務,效率比 EhCache 低,比數(shù)據(jù)庫要快很多,處理集群和分布式緩存方便,有成熟的方案。如果是單個應用或者對緩存訪問要求很高的應用,用 EhCache 。如果是大型系統(tǒng),存在緩存共享、分布式部署、緩存內容很大的,建議用 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">
 
    <!--
        磁盤存儲:將緩存中暫時不使用的對象,轉移到硬盤,類似于Windows系統(tǒng)的虛擬內存
        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:設置了緩存的上限,最多存儲多少個記錄對象
        eternal:代表對象是否永不過期 (指定true則下面兩項配置需為0無限期)
        timeToIdleSeconds:最大的發(fā)呆時間 /秒
        timeToLiveSeconds:最大的存活時間 /秒
        overflowToDisk:是否允許對象被寫入到磁盤
        說明:下列配置自緩存建立起600秒(10分鐘)有效 。
        在有效的600秒(10分鐘)內,如果連續(xù)120秒(2分鐘)未訪問緩存,則緩存失效。
        就算有訪問,也只會存活600秒。
     -->
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600"
                  timeToLiveSeconds="600" overflowToDisk="true" />
 
    <!--
        maxElementsInMemory,內存緩存中最多可以存放的元素數(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)建開始計時,失效結束
        maxElementsOnDisk,  磁盤緩存中最多可以存放的元素數(shù)量,0表示無窮大
        overflowToDisk,     內存不足時,是否啟用磁盤緩存
        diskExpiryThreadIntervalSeconds,    磁盤緩存的清理線程運行間隔,默認是120秒
        memoryStoreEvictionPolicy,  內存存儲與釋放策略,即達到maxElementsInMemory限制時,Ehcache會根據(jù)指定策略清理內存  共有三種策略,分別為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è)務處所需要的緩存策略的

默認情況下,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ù)刪除后,相關的緩存數(shù)據(jù)也要自動清除,該注解在使用的時候也可以配置按照某種條件刪除( condition 屬性)或者或者配置清除所有緩存( allEntries 屬性),示例代碼如下:

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

四、總結

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

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

相關文章

最新評論

奉贤区| 汝州市| 嘉峪关市| 英吉沙县| 汉阴县| 兴海县| 洛阳市| 梅河口市| 沅陵县| 玉溪市| 台南县| 台安县| 微山县| 百色市| 得荣县| 大理市| 白银市| 班玛县| 县级市| 曲松县| 隆昌县| 郴州市| 安福县| 邵东县| 高邮市| 五常市| 边坝县| 抚远县| 星座| 湾仔区| 西畴县| 岑溪市| 新建县| 怀来县| 玉田县| 福泉市| 云霄县| 文水县| 沾益县| 门头沟区| 瓮安县|