文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习

废话少说,直接上代码:

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.piaodoo.com/thread-13248-1-2.html 丝袜控www.txdah.com 131www.buzc.org学习之外可赏心悦目有助更好地学习!

详解Spring MVC 集成EHCache缓存_java - JAVA的更多相关文章

  1. Spring MVC学习总结(7)——Spring MVC整合Ehcache缓存框架

    Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力.接下来我们看怎么把缓存使用起来. SpringMVC集成Ehcache所需的j ...

  2. Spring Boot 集成 Ehcache 缓存,三步搞定!

    作者:谭朝红 www.ramostear.com/articles/spring_boot_ehcache.html 本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序 ...

  3. 详解Spring Boot集成MyBatis的开发流程

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...

  4. 详解Spring MVC 4常用的那些注解

    Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam, @ModelAttribute等等这样类似的注解.到目前为止,Spring的版 ...

  5. Spring中集成Ehcache缓存

    1.导入依赖包 <dependency> <groupId>org.springframework</groupId> <artifactId>spri ...

  6. (37)Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】

    [本文章是否对你有用以及是否有好的建议,请留言] 写后感:博主写这么一系列文章也不容易啊,请评论支持下. 如果看过我之前(35)的文章这一篇的文章就会很简单,没有什么挑战性了. 那么我们先说说这一篇文 ...

  7. 【转】详解spring 每个jar的作用

    spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2. ...

  8. spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

    Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...

  9. applicationContext.xml详解 spring+mybatis+struts

    今天给大家详细解释一项关于Spring的applicationContext.xml文件,这对于初学者来说,应该是很有帮助的, 以下是详解Spring的applicationContext.xml文件 ...

随机推荐

  1. yarn.lock 是干什么的

    概述 今天本地运行尤大的vue-hackernews-2.0,使用 yarn 命令安装,报错提示 node 版本必须大于7小于9,如下所示: error upath@1.0.4: The engine ...

  2. 思维导图之kubernetes

    k8s docker

  3. Java 语言特性之 Annotation 注解

    利用 Java 的反射机制,可以在运行时获取 Java 类的注解信息. 注解 注解的特性 注解是 Java 5 的一个新特性,是插入代码中的一种注释或者说是元数据.注解并不是程序代码,可以对程序作出解 ...

  4. 应用安全 - 无文件式攻击 - 工具型攻击 - PowerShell - 汇总

    PowerShell 使用 | 命令 win+r ->powershell #启动Powershell窗口 get-host #查看版本 Get-Host | Select-Object Ver ...

  5. Linux搜索文件

    1.7.1 使用which 查找可执行文件的绝对路径 ·只能用来查找PATH环境变量中出现的路径下的可执行文件 1.7.2 使用whereis 查找文件 ·通过预先生成的一个文件列表库查找与给出文件名 ...

  6. 六、Zabbix-自动分组

    一.配置Zabbix server 1.创建主机组 (2)配置—>主机群组—>创建主机群组 (2)Next Step (3)可以看到新添加的主机组 2.添加自动分组动作 配置—>动作 ...

  7. ubuntu使用iptables 持久化

    iptables 持久化 安装持久化工具apt-get install iptables-persistent Ubuntu 16.04 调用语法netfilter-persistent savene ...

  8. 选择排序--python

    def findSmallest(arr): smallest = arr[0] smallest_index = 0 for i in range(1, len(arr)): if arr[i] & ...

  9. Monkey学习笔记(一)

    (一)adb相关命令语句: 1. 查看连接设备信息:adb devices 2.安装app到手机上:adb install [-r]  [apk文件存在地址].apk 3.将文件放入设备/模拟器:ad ...

  10. 粉丝福利:收藏已久的Java架构资料免费送(仅限3天)

    有段时间没跟各位粉丝分享编程资源福利了,看了下自己的百度网盘,就剩下这个我认为是比较好的Java架构师学习资料了,相信这套资料可以对你进阶高级工程师有帮助. Java架构师技术进阶路线图 架构技术进阶 ...