1. 程式人生 > >關於springboot使用快取機制的方法

關於springboot使用快取機制的方法

EhCache 的優缺點

優點:

  1. 快速,簡單,多種快取策略
  2. 快取資料有兩級:記憶體和磁碟,因此無需擔心容量問題
  3. 快取資料會在虛擬機器重啟的過程中寫入磁碟
  4. 可以通過RMI、可插入API等方式進行分散式快取
  5. 具有快取和快取管理器的偵聽介面
  6. 支援多快取管理器例項,以及一個例項的多個快取區域
  7. 提供Hibernate的快取實現

缺點:

  1. 使用磁碟Cache的時候非常佔用磁碟空間:這是因為DiskCache的演算法簡單,該演算法簡單也導致Cache的效率非常高。它只是對元素直接追加儲存。因此搜尋元素的時候非常的快。如果使用DiskCache的,在很頻繁的應用中,很快磁碟會滿。
  2. 不能保證資料的安全:當突然kill掉java的時候,可能會產生衝突,EhCache的解決方法是如果檔案衝突了,則重建cache。這對於Cache 資料需要儲存的時候可能不利。當然,Cache只是簡單的加速,而不能保證資料的安全。如果想保證資料的儲存安全,可以使用Bekeley DB Java Edition版本。這是個嵌入式資料庫。可以確保儲存安全和空間的利用率。

1、Springboot+Mybatis專案的構建

https://blog.csdn.net/u010158540/article/details/79986760
ps:這裡是使用idea開發工具構建springboot專案

2、在pom.xml中加入ehcache快取依賴包

<dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.6.11</version>
</dependency>

echcache的屬性

        name:快取名稱                  
        maxElementsInMemory:記憶體中最大快取物件數                  
        maxElementsOnDisk:硬碟中最大快取物件數,若是0表示無窮大                  
        eternal:true表示物件永不過期,此時會忽略timeToIdleSeconds和timeToLiveSeconds屬性,預設為false                
        overflowToDisk:true表示當記憶體快取的物件數目達到了maxElementsInMemory界限後,會把溢位的物件寫到硬碟快取中。注意:如果快取的物件要寫入到硬碟中的話,則該物件必須實現了Serializable接口才行。                  
        diskSpoolBufferSizeMB:磁碟快取區大小,預設為30MB。每個Cache都應該有自己的一個快取區。               
        diskPersistent:是否快取虛擬機器重啟期資料                  
        diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設為120秒     
        timeToIdleSeconds: 設定允許物件處於空閒狀態的最長時間,以秒為單位。當物件自從最近一次被訪問後,如果處於空閒狀態的時間超過了timeToIdleSeconds屬性值,這個物件就會過期,EHCache將把它從快取中清空。只有當eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示物件可以無限期地處於空閒狀態                  
        timeToLiveSeconds:設定物件允許存在於快取中的最長時間,以秒為單位。當物件自從被存放到快取中後,如果處於快取中的時間超過了 timeToLiveSeconds屬性值,這個物件就會過期,EHCache將把它從快取中清除。只有當eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示物件可以無限期地存在於快取中。timeToLiveSeconds必須大於timeToIdleSeconds屬性,才有意義     
        memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。可選策略有:LRU(最近最少使用,預設策略)、FIFO(先進先出)、LFU(最少訪問次數)。  

3、在resources靜態資源包中加入ehcache-setting.xml配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <!-- 指定一個檔案目錄,當EhCache把資料寫到硬碟上時,將把資料寫到這個檔案目錄下 -->
    <diskStore path="${java.io.tmpdir}/ehcache/sq" />

    <!-- 設定快取的預設資料過期策略 -->
    <defaultCache maxElementsInMemory="10000" eternal="false"
                  overflowToDisk="true" timeToIdleSeconds="10" timeToLiveSeconds="20"
                  diskPersistent="false" diskExpiryThreadIntervalSeconds="120" />

    <!-- 配置說明: timeToIdleSeconds:如果客戶的訪問授權15分鐘內沒有被使用過,則從快取中清空。 -->
    <cache name="baseCache" maxElementsInMemory="1000" eternal="false"
           timeToLiveSeconds="7"
           overflowToDisk="false"
           memoryStoreEvictionPolicy="LRU"/>
</ehcache>
<!--這裡的sqlCache對應>

4、建立一個ehcache的包,並建立一個類名為CacheConfigure.java

import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;

public class CacheConfiguration {
    /*
     * ehcache 主要的管理器
     */
    @Bean(name = "appEhCacheCacheManager")
    public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean){
        return new EhCacheCacheManager (bean.getObject ());
    }

    /*
     * 據shared與否的設定,Spring分別通過CacheManager.create()或new CacheManager()方式來建立一個ehcache基地.
     */
    @Bean
    public EhCacheManagerFactoryBean ehCacheManagerFactoryBean(){
        EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean ();
        cacheManagerFactoryBean.setConfigLocation (new ClassPathResource("ehcache-setting.xml"));
        cacheManagerFactoryBean.setShared (true);
        return cacheManagerFactoryBean;
    }
}

在這裡插入圖片描述
ps:這裡的ehcache-setting.xml檔名必須與resources資源包中建立的xml檔名一致!

5、在springboot啟動檔案中掃描ehcache包

在這裡插入圖片描述

6、最後就可以在需要的地方加上@Cacheable註解

在這裡插入圖片描述
ps:@Cacheable註解的value對應ehcache-setting.xml配置檔案中的快取name
在這裡插入圖片描述
ps:下一次執行方法時,就會直接從快取裡面取,不用再次執行該方法,避免多次重複操作,佔用系統資源。
這就是springboot整合ehcache快取機制,希望對你有所幫助!

在使用ehcache中需要注意的幾點:

https://www.cnblogs.com/xhxljh/p/7553564.html