Spring MVC3 + Ehcache 缓存实现

转自: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

原文

原文地址:https://www.cnblogs.com/isme-zjh/p/11949798.html