SpringBoot集成Ehcache基本用法

本地缓存Ehcache

什么是Ehcache

 Ehcache是纯java的开源缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它主要面向通用缓存、Java EE和轻量级容器,具有内存和磁盘存储、缓存加载器、缓存扩展、缓存异常处理程序。

 Ehcache最初由Greg Luck于2003年开始开发。2009年,该项目被Terracotta购买。软件仍然开源,但一些新的主要功能(例如,快速可重启性之间的一致性的)只能在商业产品中使用。

Ehcache 被广泛用于在Hibernate、Spring、Cocoon等其他开源系统。

Ehcache的主要特性

1.快速;

2.简单;

3.多种缓存策略;

4.缓存数据有两级:内存和磁盘,因此无需担心容量问题;

5.缓存数据会在虚拟机重启的过程中写入磁盘;

6.可以通过 RMI、可插入 API 等方式进行分布式缓存;

7.具有缓存和缓存管理器的侦听接口;

8.支持多缓存管理器实例,以及一个实例的多个缓存区域;

9.提供 Hibernate 的缓存实现;

 

Ehcache使用介绍

 

Ehcache是用来管理缓存的一个工具,其缓存的数据可以是存放在内存里面的,也可以是存放在硬盘上的。其核心是CacheManager,一切Ehcache的应用都是从CacheManager开始的。它是用来管理Cache(缓存)的,一个应用可以有多个CacheManager,而一个CacheManager下又可以有多个Cache。Cache内部保存的是一个个的Element,而一个Element中保存的是一个key和value的配对,相当于Map里面的一个Entry。

 

 

Ehcache缓存过期策略

 

当缓存需要被清理时(比如空间占用已经接近临界值了),需要使用某种淘汰算法来决定清理掉哪些数据。常用的淘汰算法有下面几种:

FIFO:First In First Out,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。

LRU:Least Recently Used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。

LFU:Least Frequently Used,最不经常使用。在一段时间内,数据被使用次数最少的,优先被淘汰。

 

Maven环境依赖

		
		
			org.springframework.boot
			spring-boot-starter-cache
		
		
		
			net.sf.ehcache
			ehcache
			2.9.1
		

YML配置文件信息

spring:
  cache:
    type: ehcache
    ehcache:
      config: classpath:ehcache-local.xml

EhCache配置




	

	
    
    
    
    
    
    
    
    
	
	
	
	
	
	
 	
 	
	
	
	
    	

启动类方式@EnableCaching

@SpringBootApplication
@EnableTransactionManagement
@ServletComponentScan
@MapperScan("com.jetsen.edu.dao")
@ImportResource(locations = {"classpath:druid-bean.xml"})
@EnableCaching
public class EduCloudServicePaperApplication
    @CachePut(key="'dbFrom_'+#dbCacheForm.bizKey", value="dbFormCache")
	@Transactional(readOnly = false)
	public void updateDbCacheByBizKey(DbCacheForm dbCacheForm) {
		dbCacheForm.setUpdateDate(DateUtils.now());
		//修改信息
		dbCacheFormDao.updateDbCacheByBizKey(dbCacheForm);
	}
	
	@Cacheable(key="'dbFrom_'+#bizKey",value="dbFormCache")
	public DbCacheForm findDbCacheByBizKey(String bizKey) {
		DbCacheForm dbCacheForm = new DbCacheForm();
		dbCacheForm.setBizKey(bizKey);
		return dbCacheFormDao.findDbCacheByBizKey(dbCacheForm);
	}
	
	/**
	 * 删除
	 */
	@CacheEvict(key="'dbFrom_'+#dbCacheForm.bizKey", value="dbFormCache")
	@Transactional(readOnly=false)
	public Object delete(DbCacheForm dbCacheForm) {
		dbCacheFormDao.delete(dbCacheForm);
		return ReturnMsgUtils.returnMsg(CODE_200, null, MSG_SUCCESS);
	}
	

当然业务如有需要清除所有Ehcache缓存,可以注入CacheManager进行删除

cacheManager.getCache("dbFormCache").clear();

你可能感兴趣的:(Ehcache)