【Java】ehcache | EhCache | 集成缓存EhCache
一、说明
1、maven项目
2、SpringBoot项目
二、解决方案
1、引入依赖
<!--ehcache-->
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.8.3</version>
</dependency>
2、增加配置文件
1)位于resources根目录
2)示例图
3)ehcache.xml
<?xml version="1.0" encoding="UTF-8"?> <ehcache name="cache" updateCheck="false"><!-- 磁盘缓存位置 --><diskStore path="java.io.tmpdir"/><defaultCache eternal="false" maxElementsInMemory="1000"overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="3600"timeToLiveSeconds="3600" memoryStoreEvictionPolicy="LRU" /><!-- 手动指定的缓存策略 --><!-- 对不同的数据,缓存策略可以在这里配置多种 --><!--sys-ku,库管理--><!--diskStore path:用来配置磁盘缓存使用的物理路径name: 缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里)eternal="false" 元素是否永恒,如果是就永不过期(必须设置)maxElementsOnDisk====磁盘缓存中最多可以存放的元素数量,0表示无穷大maxElementsInMemory="1000" 内存缓存中最多可以存放的元素数量(必须设置)timeToIdleSeconds="0" 导致元素过期的访问间隔(秒为单位). 0表示可以永远空闲,默认为0timeToLiveSeconds="600" 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期overflowToDisk="false" 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)diskPersistent="false" 磁盘缓存在VM重新启动时是否保持(默认为false)diskExpiryThreadIntervalSeconds="100" 磁盘失效线程运行时间间隔,默认是120秒memoryStoreEvictionPolicy="LFU" 内存存储与释放策略.当达到maxElementsInMemory时共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出)默认使用"最近使用"策略--><cachename="sys"eternal="false"maxElementsInMemory="1000"overflowToDisk="false"diskPersistent="false"timeToIdleSeconds="300"timeToLiveSeconds="0"memoryStoreEvictionPolicy="LRU" /></ehcache>
3、增加配置类
package hg.demo.spring.boot.web.ehcache;import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;@Configuration
@EnableCaching
public class EhCacheConfig {@Beanpublic EhCacheManagerFactoryBean cacheManagerFactoryBean(){EhCacheManagerFactoryBean bean = new EhCacheManagerFactoryBean();bean.setConfigLocation(new ClassPathResource("ehcache.xml"));bean.setShared(true);return bean;}@Beanpublic EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean){return new EhCacheCacheManager(bean.getObject());}
}
4、封装工具类
package hg.demo.spring.boot.web.ehcache;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Component;/*** @author hgSuper* @date 2021-10-14*/
@Slf4j
@Component("ehCacheUtils")
public class EhCacheUtils {@AutowiredEhCacheCacheManager ehCacheCacheManager;/*** 设值* @param cacheName 策略名* @param key* @param val json*/public void set(String cacheName, String key, String val) {log.info("set(),ehcache-设值,cacheName:{}", cacheName);log.info("set(),ehcache-设值,key:{}", key);log.info("set(),ehcache-设值,val:{}", val);ehCacheCacheManager.getCache(cacheName).put(key, val);}/*** 查询* @param cacheName* @param key* @return*/public String get(String cacheName, String key) {log.info("get(),ehcache-查询,cacheName:{}", cacheName);log.info("get(),ehcache-查询,key:{}", key);String val = ehCacheCacheManager.getCache(cacheName).get(key, String.class);log.info("get(),ehcache-查询,val:{}", val);return val;}/*** 删除* @param cacheName* @param key*/public void remove(String cacheName, String key) {log.info("remove(),ehcache-删除,cacheName:{}", cacheName);log.info("remove(),ehcache-删除,key:{}", key);ehCacheCacheManager.getCache(cacheName).evict(key);}/*** 清空* @param cacheName*/public void clear(String cacheName) {log.info("remove(),ehcache-清空,cacheName:{}", cacheName);ehCacheCacheManager.getCache(cacheName).clear();}
}
5、注解方式
1)@Cacheable
作用:在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问。
@Cacheable(value="策略名,配置在ehcache.xml",key="'key_'+#id")
说明1: key,不支持枚举,支持静态常量
说明2: #id,即入参变量名,类型可以是对象,调用 【"#id" -> "#bean.name"】
2)@CacheEvict
作用:通常用在删除方法,用来从缓存中移除相应数据
@CacheEvict(value = "策略名,配置在ehcache.xml", key = "")
3)@CachePut
作用:用于数据新增和修改操作上,用于更新缓存。
@CachePut(value = "策略名,配置在ehcache.xml", key = "")
【Java】ehcache | EhCache | 集成缓存EhCache相关推荐
- springboot+mybatis集成自定义缓存ehcache用法笔记
今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一.ehcache介绍 EhCache 是一个纯Java的进程内缓存管理框架,属 ...
- SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)
1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...
- 【EhCache: 一款Java的进程内缓存框架】EhCache 是什么、代码实战、版本3的改进
文章目录 1 EhCache 是什么 2 EhCache 版本2 代码实战 Demo pom.xml TestEH.java ehcache.xml 3 EhCache 版本3 代码实战 Demo p ...
- java ehcahce刷新_Spring整合ehcache 注解实现查询缓存,并实现实时缓存更新或删除...
写在前面:上一篇博客写了spring cache和ehcache的基本介绍,个人建议先把这些最基本的知识了解了才能对今天主题有所感触.不多说了,开干! 注:引入jar net.sf.ehcache e ...
- java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...
一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...
- 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间
问答 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间 发布于 217天前 作者 老司机 93 次浏览 复制 上一个帖子 下一个帖子 标签: 无 集成Ehcache用来缓存表以后,怎 ...
- EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是hibernate中默认的CacheProvider Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存, ...
- Java的进程内缓存框架:EhCache (转)
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache缓存的特点: 1. 快速. 2. 简单. 3. 多种缓存 ...
- (12) Hibernate+EhCache配置二级缓存
转载地址 http://jyao.iteye.com/blog/1315726 (有关EhCache的基础介绍可参见:http://sjsky.iteye.com/blog/1288257 ) 本文主 ...
最新文章
- Linux下设置进程使用指定核的CPU
- 软件测试基础 - 测试覆盖率
- Java剖析工具JProfiler入门使用教程:离线剖析和触发器
- Spring对象绑定与类型转换
- excel快速填充_F4键,Excel中最强大的快捷键,没有之一
- newgrp - 登录到新的用户组中
- centos7 安装postgresql10
- 【hdu2588】求[1-n]中和n的gcd大于m的数的个数(求欧拉函数值)
- 健康档案管理系统方案/案列/APP/软件/小程序
- TimesTen索引的概念与日常操作
- 商务部关于促进电子商务规范发展的意见
- Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码
- JQ拖曳事件mouseup失效的解决办法
- 活性氧Propiconazole-d3 (nitrate),CAS No. 2699607-26-4
- 2.2 Collections类 (Collections源码解析)
- 若依源码分析(6)——部门管理
- 在多个项目聚合时,指定packing为pom
- 【Python学习教程】Python编程环境搭建
- 老师,强奸你时别叫痛(转载)
- 中华会计网吉安培训中心