SpringBoot2 整合Ehcache組件,輕量級緩存管理

本文源碼:GitHub·點這裏 || GitEE·點這裏java

1、Ehcache緩存簡介

一、基礎簡介

EhCache是一個純Java的進程內緩存框架,具備快速、上手簡單等特色,是Hibernate中默認的緩存提供方。git

二、Hibernate緩存

Hibernate三級緩存機制簡介:github

一級緩存:基於Session級別分配一塊緩存空間,緩存訪問的對象信息。Session關閉後會自動清除緩存。redis

二級緩存:是SessionFactory對象緩存,能夠被建立出的多個 Session 對象共享,二級緩存默認是關閉的,若是要使用須要手動開啓,而且依賴EhCache組件。spring

三級緩存:查詢緩存,配置開啓該緩存的狀況下,重複使用一個sql查詢某個範圍內的數據,會進行緩存。sql

三、EhCache緩存特色

  • 快速,簡單,而且提供多種緩存策略;
  • 緩存數據有兩級:內存和磁盤,無需擔憂容量問題;
  • 緩存數據會在虛擬機重啓的過程當中寫入磁盤;
  • 能夠經過RMI、可插入API等方式進行分佈式緩存;
  • 具備緩存和緩存管理器的偵聽接口;
  • 支持多緩存管理器實例,以及一個實例的多個緩存區域;
  • 提供Hibernate的緩存實現;

四、對比Redis緩存

Ehcache:直接在Jvm虛擬機中緩存,速度快,效率高,不適合處理大規模緩存數據,在分佈式環境下,緩存數據共享操做複雜;數據庫

Redis:做爲獨立的緩存中間件,在分佈式緩存系統中很是好用,緩存數據共享,有效支撐大量數據緩存,支持哨兵模式,或者集羣模式的高可用成熟方案;跨域

2、集成SpringBoot框架

一、核心依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>

二、加載配置

基礎配置緩存

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

啓動類註解springboot

@EnableCaching
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args) ;
    }
}

三、配置詳解

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

    <!-- 操做系統緩存的臨時目錄,內存滿後寫入該目錄 -->
    <diskStore path="java.io.tmpdir"/>

    <defaultCache
            maxElementsInMemory="1000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </defaultCache>

    <cache name="userEntity"
           maxElementsInMemory="1000"
           eternal="false"
           timeToIdleSeconds="120"
           timeToLiveSeconds="120"
           maxElementsOnDisk="10000000"
           diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </cache>
</ehcache>

配置參數說明

maxElementsOnDisk:磁盤緩存中最多能夠存放的元素數量;

eternal:緩存中對象是否永久有效;

timeToIdleSeconds:當eternal=false時使用,緩存數據有效期(單位:秒),時間段內沒有訪問該元素,將被清除;

timeToLiveSeconds:緩存數據的存活時間;

maxElementsInMemory:內存中最多能夠存放的元素數量,overflowToDisk=true,則會將Cache中多出的元素放入磁盤文件中,若overflowToDisk=false,則根據memoryStoreEvictionPolicy策略替換Cache中原有的元素;

diskExpiryThreadIntervalSeconds:磁盤緩存的清理線程運行間隔;

memoryStoreEvictionPolicy:緩存釋放策略,LRU會優先清理最少使用的緩存;

localTempSwap:持久化策略,當堆內存或者非堆內存裏面的元素已經滿了的時候,將其中的元素臨時的存放在磁盤上,重啓後就會消失;

3、註解用法

@Service
public class CacheService {

    private static final Logger LOGGER = LoggerFactory.getLogger(CacheService.class);

    @Resource
    private UserMapper userMapper ;

    @Cacheable(value="userEntity")  // 在緩存有效期內,首次查詢才訪問數據庫
    public UserEntity getById (Integer id){
        // 經過日誌,標識方法是否執行
        LOGGER.info("getById..."+id);
        return userMapper.selectById(id) ;
    }

    @CacheEvict(value="userEntity",key = "#id") //該ID數據更新,清空該ID緩存
    public void updateUser(Integer id) {
        UserEntity user = new UserEntity() ;
        user.setId(id);
        user.setUserName("myCache");
        userMapper.updateById(user);
    }
}

@Cacheable:註解標記在一個方法上,也能夠標記在一個類上,標記在一個方法上表示該方法支持緩存,該方法被調用後將其返回值緩存起來,下次一樣的請求參數執行該方法時能夠直接從緩存中獲取結果,而不須要再次執行該方法。

@CacheEvict:註解標記在須要清除緩存元素的方法或類上的,當標記在一個類上時表示其中全部的方法的執行都會觸發緩存的清除操做,而且能夠按照指定屬性清除。

4、源代碼地址

GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent

推薦閱讀:SpringBoot進階系列

序號 文章標題
01 Boot2 整合 shard-jdbc 中間件,實現數據分庫分表
02 Boot2 整合 JavaMail ,實現異步發送郵件功能
03 Boot2 整合 RocketMQ ,實現請求異步處理
04 Boot2 整合 Swagger2 ,構建接口管理界面
05 Boot2 整合 QuartJob ,實現定時器實時管理
06 Boot2 整合 Redis集羣 ,實現消息隊列場景
07 Boot2 整合 Dubbo框架 ,實現RPC服務遠程調用
08 Boot2 整合 ElasticSearch框架,實現高性能搜索引擎
09 Boot2 整合 JWT 框架,解決Token跨域驗證問題
10 Boot2 整合 FastDFS 中間件,實現文件分佈管理
11 Boot2 整合 Shiro 框架,實現用戶權限管理
12 Boot2 整合 Security 框架,實現用戶權限管理
13 Boot2 整合 ClickHouse數據庫,實現數據高性能查詢分析
14 Boot2 整合 Drools規則引擎,實現高效的業務規則
15 Boot2 整合 多數據源,配置MybatisPlus加強插件
16 Boot2 整合 Zookeeper組件,管理架構中服務協調
17 Boot2 整合Nacos組件,環境搭建和入門案例詳解
18 文件系統(01):基於Boot2框架,管理Excel和PDF
18 文件系統(02):基於Boot2框架,管理Xml和CSV
19 Boot2 整合 Kafka組件,應用案例和流程詳解
20 Boot2 整合 ElasticJob框架,定製化管理流程
21 Boot2 整合JTA組件,多數據源事務管理
22 Boot2 整合FreeMarker模板,完成頁面靜態化處理
23 Boot2 整合MinIO中間件,實現文件便捷管理
相關文章
相關標籤/搜索