1、maven pom文件增加依赖
<!-- ehcache -->
<dependency>
<groupId>com.googlecode.ehcache-spring-annotations</groupId>
<artifactId>ehcache-spring-annotations</artifactId>
<version>1.2.0</version>
<exclusions>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-expression</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
2、配置spring xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:ehcache="http://ehcache-spring-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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-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-config.xml"/>
</bean>
</beans>
3、配置ehcache-config.xml
<?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="user.home/ehcacheDiskStore" />
<defaultCache eternal="false" maxElementsInMemory="10000" overflowToDisk="false" diskPersistent="false"
timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
<!-- 一个小时过期的缓存 -->
<cache name="LRUCache-1h" eternal="false" maxElementsInMemory="4000" overflowToDisk="false" maxElementsOnDisk="1000"
diskPersistent="false" diskExpiryThreadIntervalSeconds="100" timeToIdleSeconds="0" timeToLiveSeconds="3600"
memoryStoreEvictionPolicy="LRU" />
<!-- 一天过期的缓存 -->
<cache name="LRUCache-1d" copyOnRead="true" eternal="false" maxElementsInMemory="4000" overflowToDisk="false" maxElementsOnDisk="1000"
diskPersistent="false" diskExpiryThreadIntervalSeconds="100" timeToIdleSeconds="0" timeToLiveSeconds="86400"
memoryStoreEvictionPolicy="LRU" />
<!-- 十天过期的缓存 -->
<cache name="LRUCache-10d" copyOnRead="true" eternal="false" maxElementsInMemory="4000" overflowToDisk="false" maxElementsOnDisk="1000"
diskPersistent="false" diskExpiryThreadIntervalSeconds="100" timeToIdleSeconds="0" timeToLiveSeconds="864000"
memoryStoreEvictionPolicy="LRU" />
<!-- 5分钟过期的缓存 -->
<cache name="LRUCache-5m" eternal="false" maxElementsInMemory="4000" overflowToDisk="false" maxElementsOnDisk="1000"
diskPersistent="false" diskExpiryThreadIntervalSeconds="100" timeToIdleSeconds="0" timeToLiveSeconds="300"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
4、使用注解
@Cacheable(cacheName="LRUCache-5m")
@TriggersRemove(cacheName="LRUCache-5m",removeAll=true)
5、关键参数解读
name - cache的标识符,在一个CacheManager中必须唯一
maxElementsInMemory - 在内存中缓存的element的最大数目
maxElementsOnDisk - 在磁盘上缓存的element的最大数目
eternal - 设定缓存的elements是否有有效期。如果为true,timeouts属性被忽略
overflowToDisk - 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上
以下属性是可选的:
timeToIdleSeconds - 缓存element在过期前的空闲时间。默认为0,表示可空闲无限时间.
timeToLiveSeconds - 缓存element的有效生命期。这个类似于timeouts,默认为0,不过期
diskPersistent - 在VM重启的时候是否持久化磁盘缓存,默认是false。
diskExpiryThreadIntervalSeconds - 磁盘缓存的清理线程运行间隔,默认是120秒.
memoryStoreEvictionPolicy - 当内存缓存达到最大,有新的element加入的时候,移除缓存中element的策略。默认是LRU,可选的有LFU和FIFO
evict-expired-elements interval="60" - interval is in minutes,失效的缓存,ehcache并没有立即清除,要么在下次访问的时候清除,要么在triggersRemove调用的时候清除,要么就是在Ehcache#evictExpiredElements()被调用的时候清除,这个配置在xml里头,时间单位是分钟,每隔多少分钟定时清理一次。
6、ehcache-spring的key生成策略
默认采用的是 HashCodeCacheKeyGenerator
基于方法参数的hashkey,类+方法名+参数hashCode