详解Spring MVC 集成EHCache缓存
作者:jiangadam 发布时间:2022-05-28 04:42:52
标签:spring,mvc,ehcache
废话少说,直接上代码:
ehcache.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache dynamicConfig="false" monitoring="off" updateCheck="false"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<!-- 定义缓存策略
eternal="false" // 元素是否永恒,如果是就永不过期(必须设置)
maxEntriesLocalHeap="1000" // 堆内存中最大缓存对象数,0没有限制(必须设置)
overflowToDisk="false" // 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)
diskPersistent="false" // 磁盘缓存在VM重新启动时是否保持(默认为false)
timeToIdleSeconds="0" // 导致元素过期的访问间隔(秒为单位). 当eternal为false时,这个属性才有效,0表示可以永远空闲,默认为0
timeToLiveSeconds="600" // 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期
memoryStoreEvictionPolicy="LFU" // 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用(LRU)"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU
-->
<!--
1)maxElementsInMemory(正整数):在内存中缓存的最大对象数量
2)maxElementsOnDisk(正整数):在磁盘上缓存的最大对象数量,默认值为0,表示不限制。
3)eternal:设定缓存对象保存的永久属性,默认为 false 。当为 true 时 timeToIdleSeconds、timeToLiveSeconds 失效。
4)timeToIdleSeconds(单位:秒):对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。
5)timeToLiveSeconds(单位:秒):对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。
6)overflowToDisk:如果内存中数据超过内存限制,是否要缓存到磁盘上。
7)diskPersistent:是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。
8)diskSpoolBufferSizeMB(单位:MB):DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。
9)memoryStoreEvictionPolicy:如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。
FIFO(first in first out):先进先出
LFU(Less Frequently Used):最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清除缓存。
LRU(Least Recently Used)默认策略:最近最少使用,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清除缓存。
10) maxEntriesLocalHeap 堆内存中最大缓存对象数
-->
<diskStore path="java.io.tmpdir"></diskStore>
<defaultCache
eternal="false"
maxEntriesLocalHeap="0"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsInMemory="10000"
overflowToDisk="true"
diskPersistent="true"
/>
<cache
name="userCache"
maxEntriesLocalHeap="10000"
/>
<cache
name="studentCache"
maxEntriesLocalHeap="10000"
/>
</ehcache>
需要增加的JAR包
springmvc.xml 需要在beans增加以下
xmlns:cache="http://www.springframework.org/schema/cache"
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
增加bean
<!-- 启用缓存注解功能(请将其配置在Spring主配置文件中) -->
<cache:annotation-driven cache-manager="cacheManager"/>
<!-- Spring提供的基于的Ehcache实现的缓存管理器 -->
<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:config/ehcache.xml"/>
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="cacheManagerFactory"/>
</bean>
EHCacheUtils 操作类
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
* 操作缓存类
*
* @author jiangadam
*/
public class EhcacheUtils {
private static final String path = "/config/ehcache.xml"; // EHCache 的配置文件地址
private CacheManager manager;
private static EhcacheUtils ehCache;
private EhcacheUtils(String path) {
manager = CacheManager.create(getClass().getResource(path));
}
public static EhcacheUtils getInstance() {
if (ehCache == null) {
ehCache = new EhcacheUtils(path);
}
return ehCache;
}
/**
* 缓存一个对象
*
* @param cacheName
* 缓存的名字
* @param key
* 缓存的KEY
* @param value
* 缓存的值
*/
public void put(String cacheName, String key, Object value) {
Cache cache = manager.getCache(cacheName);
Element element = new Element(key, value);
cache.put(element);
}
/**
* 获取一个缓存的对象,没有返回NULL
*
* @param cacheName
* @param key
* @return
*/
public Object get(String cacheName, String key) {
Cache cache = manager.getCache(cacheName);
Element element = cache.get(key);
return element == null ? null : element.getObjectValue();
}
public Cache get(String cacheName) {
return manager.getCache(cacheName);
}
public void remove(String cacheName, String key) {
Cache cache = manager.getCache(cacheName);
cache.remove(key);
}
}
PUT 写入缓存
GET 获取缓存的数据
来源:http://www.jianshu.com/p/d3de821317b7


猜你喜欢
- 开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教。1.Student
- 本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下:在Java中对于字符串数组的排序,我们可
- spring cloud常用依赖和配置整理常用依赖// pom.xml<?xml version="1.0" en
- 本文实例讲述了Spring实战之SpEl语法。分享给大家供大家参考,具体如下:一 Beanpackage org.crazyit.app.d
- Java数字格式类以下两个类可用于格式化和解析数字:java.text.NumberFormatjava.text.DecimalForma
- 本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类、BitmapData类和Graphics类是C#处理图像的的3个
- 前言本节将介绍如何设置和使用MongoDB 驱动程序,通过 java实现与MongoDB服务端的通信功能,用户可以在此基础上进行各种Java
- 本文实例展示了WinForm实现为ComboBox绑定数据源并提供下拉提示功能,这是一个非常有实用价值的功能,具体实现方法如下:主要功能代码
- 什么是EurekaEureka是Netfilx开源的一个用来实现微服务的注册与发现的组件。它包含Server和Client两部分。为什么要有
- 浅谈java 执行jar包中的main方法通过 OneJar 或 Maven 打包后 jar 文件,用命令:java -jar ****.j
- 引言Object类是所有类、数组的父类,位于java.lang 包下也就是说,Java允许把所有任何类型的对象赋给Object类型的变量。当
- 做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用
- springboot-dubbo cannot be cast to使用spring boot 集成dubbo的时候遇到问题:2018-05
- 1.实现一个ItsClient 客户端用来实例化调用验证功能public class ItsClient {private static f
- 一、坐标分类地图坐标大致分为几种: 1、GPS、WGS84,也就是原始坐标体系,
- 本文要实现的是在 android 8.0 的平台上,蓝牙遥控器与TV自动配对,具体就是在TV端打开配对界面,TV端开始搜索远程蓝牙设备,按下
- java jpa自定义sql语句本篇只是为了再次记录自己又学习了jpa的使用,框架原生的通过解析方法名多适用于单表操作,自定义的sql查询则
- 主要功能共有三个角色:管理员、教师、学生。管理员功能有:学生管理、教师管理、评教管理、指标管理、课程管理等。教师功能有:学生管理、指标管理、
- 这篇文档主要关注下配置修改后对应的 Java 对象是如何更新,并不关注整体的配置改动流程所有代码都来自 apollo-client 项目更新
- 话说为了防止 * ,业内有不成文规定,手机公司在做camera时,点击拍照和录像键的时候,必须要有提示音。因此,google也就非常人性化的将