SpringBoot整合Ehcache實現(xiàn)熱點數(shù)據(jù)緩存的方法是什么

這篇文章主要介紹了SpringBoot整合Ehcache實現(xiàn)熱點數(shù)據(jù)緩存的方法是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringBoot整合Ehcache實現(xiàn)熱點數(shù)據(jù)緩存的方法是什么文章都會有所收獲,下面我們一起來看看吧。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站設計制作、網(wǎng)站設計、紅山網(wǎng)絡推廣、小程序制作、紅山網(wǎng)絡營銷、紅山企業(yè)策劃、紅山品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供紅山建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:bm7419.com

    一、簡介

    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實現(xiàn)熱點數(shù)據(jù)緩存的方法是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringBoot整合Ehcache實現(xiàn)熱點數(shù)據(jù)緩存的方法是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

    網(wǎng)頁標題:SpringBoot整合Ehcache實現(xiàn)熱點數(shù)據(jù)緩存的方法是什么
    分享URL:http://bm7419.com/article22/pciocc.html

    成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設、網(wǎng)站排名、域名注冊、網(wǎng)站收錄、做網(wǎng)站、動態(tài)網(wǎng)站

    廣告

    聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

    成都定制網(wǎng)站網(wǎng)頁設計