转自:http://www.coin163.com/it/490594393324999265/spring-ehcache

Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、Hibernate也非常的简单,Spring对Ehcache的支持也非常好。EHCache支持内存和磁盘的缓存,支持

主会场地址:https://www.aliyun.com/1111/2019/home

版本:Spring3.0.6 准备工作: 下载 ehcache-spring-annotations-1.2.0 http://code.google.com/p/ehcache-spring-annotations/downloads/list

下载完加压后里面的lib下的jar统统添加到classpath中 在资源文件夹下(通常是src/main/resources) 添加 ehcache.xml 内容如下 [html]

view plain

copy

print ? <?xml version="1.0" encoding="UTF-8"?>

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

xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"

updateCheck="false">

<diskStore path="java.io.tmpdir" />

<defaultCache eternal="false"

maxElementsInMemory="1000"

overflowToDisk="false"

diskPersistent="false"

timeToIdleSeconds="0"

timeToLiveSeconds="600"

memoryStoreEvictionPolicy="LFU" />

<cache name="baseCache"

eternal="false"

maxElementsInMemory="500"

overflowToDisk="false"

diskPersistent="false"

timeToIdleSeconds="0"

timeToLiveSeconds="300"

memoryStoreEvictionPolicy="LFU" />

</ehcache>

这里是定义缓存策略 eternal="false"

// 元素是否永恒,如果是就永不过期(必须设置)

maxElementsInMemory="1000" // 缓存容量的内存最大值(必须设置)

overflowToDisk="false"

// 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)

diskPersistent="false"

// 磁盘缓存在VM重新启动时是否保持(默认为false)

timeToIdleSeconds="0" // 导致元素过期的访问间隔(秒为单位). 0表示可以永远空闲,默认为0

timeToLiveSeconds="600" // 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期

memoryStoreEvictionPolicy="LFU" // 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用(LRU)"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU

然后在添加 cache-config.xml 内容如下: [html]

view plain

copy

print ? <beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:ehcache="http://ehcache-spr

ing-annotations.googlecode.com/svn/schema/ehcache-spring"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring

http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">

<ehcache:annotation-driven />

<ehcache:config cache-manager="cacheManager">

<ehcache:evict-expired-elements

interval="60" />

</ehcache:config>

<bean id="cacheManager"

class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

<property name="configLocation" value="classpath:ehcache.xml" />

</bean>

</beans>

然后在DAO层做如下配置: [java]

view plain

copy

print ?

@TriggersRemove(cacheName="baseCache",removeAll=true)

public Entity save(Entity entity) throws CrudException {

return entity;

}

@TriggersRemove(cacheName="baseCache",removeAll=true)

public Entity update(Entity entity) throws CrudException {

return entity;

}

@TriggersRemove(cacheName="baseCache",removeAll=true)

public void del(Entity entity) throws CrudException {

}

@Cacheable(cacheName="baseCache")

@SuppressWarnings("unchecked")

public List<Entity> findAll() throws SearchException {

return list;

}

@Cacheable(cacheName="baseCache") 这个注解就是做到缓存数据,cacheName对应ehcache.xml 中配置

@TriggersRemove(cacheName="baseCache",removeAll=true) 这个注解的作用就是当数据发生变化的时候清除缓存,做到数据同步

如何知道有没生效: 新建一个单元测试,在类中添加两个搜索的方法,然后执行这个单元测试,然后查看两个方法执行的时间(Eclipse的单元测试可以查看) 如果第二个搜索方法的运行时间为0那就说吗成功了,如图

参考: http://www.blogjava.net/zzzlyr/articles/343234.html http://blog.goyello.com/2010/07/29/quick-start-with-ehcache-annotations-for-spring/

(英文的,推荐) RE : http://blog.csdn.net/thc1987/article/details/7345816

原文

Spring MVC3 + Ehcache 缓存实现的更多相关文章

  1. 缓存插件 Spring支持EHCache缓存

    Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能.其中,spring对EHCache提供了很好的支持. 在介绍Spring的缓 ...

  2. 以Spring整合EhCache为例从根本上了解Spring缓存这件事(转)

    前两节"Spring缓存抽象"和"基于注解驱动的缓存"是为了更加清晰的了解Spring缓存机制,整合任何一个缓存实现或者叫缓存供应商都应该了解并清楚前两节,如果 ...

  3. spring+shiro+ehcache整合

    1.导入jar包(pom.xml文件) <!-- ehcache缓存框架 --> <dependency> <groupId>net.sf.ehcache</ ...

  4. Spring整合Ehcache管理缓存

    前言 Ehcache 是一个成熟的缓存框架,你可以直接使用它来管理你的缓存. Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Ehcache),但本身不直接提供缓存功能的实现.它 ...

  5. Spring整合Ehcache管理缓存(转)

    目录 前言 概述 安装 Ehcache的使用 HelloWorld范例 Ehcache基本操作 创建CacheManager 添加缓存 删除缓存 实现基本缓存操作 缓存配置 xml方式 API方式 S ...

  6. Spring自定义缓存管理及配置Ehcache缓存

    spring自带缓存.自建缓存管理器等都可解决项目部分性能问题.结合Ehcache后性能更优,使用也比较简单. 在进行Ehcache学习之前,最好对Spring自带的缓存管理有一个总体的认识. 这篇文 ...

  7. 使用Spring提供的缓存抽象机制整合EHCache为项目提供二级缓存

      Spring自身并没有实现缓存解决方案,但是对缓存管理功能提供了声明式的支持,能够与多种流行的缓存实现进行集成. Spring Cache是作用在方法上的(不能理解为只注解在方法上),其核心思想是 ...

  8. Spring 集成 Ehcache 开启缓存

    1.jar包 1.1.slf4j-api-1.6.1.jar 1.2.ehcache-2.7.0.jar 1.3.spring-core-3.2.0.RELEASE.jar 1.4.spring-co ...

  9. spring整合ehcache注解实现查询缓存,并实现实时缓存更新或删除

    转载: http://www.importnew.com/23358.html 写在前面:上一篇博客写了spring cache和ehcache的基本介绍,个人建议先把这些最基本的知识了解了才能对今天 ...

随机推荐

  1. [Linux] git add时的注意事项

    git add -A  提交所有变化 git add -u  提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) git add .  提交新文件(new)和被修改( ...

  2. python下timer定时器常用的两种实现方法

    方法一,使用线程中现成的:   这种一般比较常用,特别是在线程中的使用方法,下面是一个例子能够很清楚的说明它的具体使用方法: #! /usr/bin/python3 #! -*- conding: u ...

  3. ios输入法弹出输入框定位错乱

    弹出输入框会使视口高度发生变化,弹出输入框后动态匹配这个高度 以下是使用jq的方法 $('input').on('blur', function () { setTimeout(function () ...

  4. LeetCode 13、罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 ...

  5. 程序里面带有浮点数,默认会自动转换为double类型存储

    带有浮点数,默认会转换为double类型存储. #include "common.h" #include <stdio.h> #include <stdlib.h ...

  6. Netty中CompositeByteBuf的理解以及读写操作

    转载请注明出处 https://www.cnblogs.com/majianming/articles/the_composite_byte_buf_read_and_wite_operation_o ...

  7. ubuntu安装pyenv

    安装依赖包 bash {.line-numbers} sudo apt-get update sudo apt-get install build-essential python-dev pytho ...

  8. Python查找列表中某个元素返回所有下标

    需求 找出list中某一元素并返回所有匹配index值 问题 使用index()只能返回一个下标 >>> cw=[0,1,2,1,1,0,1,0,0,1] >>> ...

  9. (1)-Android学习笔记之:初识Android系统架构和项目结构

    Android系统架构 Android程序结构 创建一个Android项目,为初学便于理解,将程序项目结构切换为Project模式,项目结构如下 .gradle和.idea:这两个目录下放的都是And ...

  10. pandas时间序列学习笔记

    目录 创建一个时间序列 pd.date_range() info() asfred() shifted(),滞后函数 diff()求差分 加减乘除 DataFrame.reindex() 通过data ...