这里举例使用spring3.1.4 + ehcache
注解的方式使用cache 是在spring3.1加入的
使用方法:
1.ehcache依赖+spring依赖
<!-- ehcache依赖--> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.7.2</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.1.4.RELEASE</version> </dependency>
<!-- 这里有注解类需要的jar -->
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.4.RELEASE</version> </dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
2.spring+ehcache的简单配置
Ehcache的基本配置,具体参数意思看:http://www.ehcache.org/documentation/configuration/configuration
name |
cache的唯一标识 |
maxElementsInMemory |
最大创建条数 |
eternal |
缓存是否是永久的,默认false |
timeToLiveSeconds |
缓存的存活时间 |
timeToIdleSeconds |
多长时间不访问就清楚该缓存 |
overflowToDisk |
内存不足是否写入磁盘,默认False |
maxElementsOnDisk |
持久化到硬盘最大条数 |
memoryStoreEvictionPolicy |
缓存满了后,清除缓存的规则, 自带三种:FIFO(先进先出),LFU(最少使用),LRU(最近最少使用) |
diskSpoolBufferSizeMB |
磁盘缓存的缓存区大小,默认30M |
diskExpiryThreadIntervalSeconds |
磁盘失效线程时间间隔 |
2.1 首先建立一个ehcache.xml的配置文件
<ehcache> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> <cache name="onecache" maxElementsInMemory="10000" eternal="false" overflowToDisk="false" timeToIdleSeconds="10" timeToLiveSeconds="10"/> </ehcache>
2.2在spring的apllication.xml 加入注入的cache
<cache:annotation-driven cache-manager="cacheManager"/> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehcache"/> <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml" p:shared="true"/>
这里还需要在配置文件头部引入
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
...
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
"
在mvc-servlet.xml 里加入
<mvc:annotation-driven/> <!-- 挺重要的,不加注解不会被扫描-->
3.注解使用
3.1 用于对象 class
@Cacheable(value = "onecache")
class A1{}
这种情况类中方法中返回值都会被缓存,
3.2用于方法method
@Cacheable(value = "onecache", key = "#name",condition = "#age < 25") public xx findEmployeeBySurname(String firstName, String name, int age) { return xxx }
这个就会将age小于25的值,按name为key缓存
3.3 清除
@CacheEvict(value="onecache",key="#name + 'haha'") public void delete(String name) { System.out.println("delete one name"); }
还可使用下面的清除全部
@CacheEvict(value="oneCache",allEntries=true)
4.代码调用
@Autowired private CacheManager cacheManager; //获取当前时间 public String getABCCache() {
cacheManager.getCache("ccc").put("hello", new Date().toString()); return (String) cacheManager.getCache("ccc").get("hello").get(); }