spring cache
摘要: Spring3.1使用自带的cache组件,方便项目中使用注释管理缓存。
一.在Spring配置文件中添加:
<cache:annotation-driven/>
等价于:
<!-- cacheManager为默认的缓存管理器名称 --> <cache:annotation-driven cache-manager="cacheManager"/>
二.添加bean文件:cacheManager
<!-- spring自己的缓存管理器 --> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <!-- 定义缓存集合caches --> <property name="caches"> <set> <!-- ConcurrentMapCacheFactoryBean为spring提供的内存存储工厂类,定义了两个名称. --> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default" /> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="config" /> </set> </property> </bean>
自己可以写适合项目的CacheManager,并定义CacheFatoryBean(如遇上了性能瓶颈,需要使用Ehcache,Redis),方便扩展。
三.在Java类中使用注释。
1.添加缓存: /** 缓存config集合里的key为keyName,当满足方法参数keyName值的长度小于10时,使用缓存管理 */ @Cacheable(value="config",key="#keyName",condition="#keyName.length()<10") condition为SEL(Spring Express Language). 如果缓存没有值,通常从数据库中获取值保存在缓存中,以后调用该方法,直接从缓存中取。 注意:value是必选项,定义了使用的缓存集合,key如果不定义时默认为方法的参数, 2.更新缓存 /** 调用该方法时更新config缓存集合里,key为account对象里的name的缓存 */ @CachePut(value="config",key="#account.getName()") 3.清空缓存 /** * 缓存config集合里的key为keyName,当满足方法参数keyName值的长度小于10时, * 清空缓存config集合里key为keyName的缓存,并且在为执行方法之前就执行 */ @CacheEvict(value="config",key="#keyName",condition="#keyName.length()<10",beforeInvocation=true) /** 清空缓存config集合里的所有缓存 */ @CacheEvict(value="config",allEntries=true)
四:它的原理就是Spring AOP ,动态代理技术。
使用时如果需要使用缓存时,避免在方法使用this.调用,这样就不会操作缓存了。
浙公网安备 33010602011771号