当前位置: 代码迷 >> Web前端 >> Spring 3.1 M1 中的缓存效能
  详细解决方案

Spring 3.1 M1 中的缓存效能

热度:486   发布时间:2012-11-25 11:44:31.0
Spring 3.1 M1 中的缓存功能

本文转自:http://www.oschina.net/question/12_16549

上个月 Spring 发布了 3.1 的第一个里程碑版本,详情请看这里。

该版本最酷的新特性就是引入全方位的缓存支持。Spring 3.1 提供了对已有的 Spring 应用增加缓存的支持,这个特性对应用本身来说是透明的,通过缓存抽象层,使得对已有代码的影响降低到最小。

该缓存机制针对于 Java 的方法,通过给定的一些参数来检查方法是否已经执行,Spring 将对执行结果进行缓存,而无需再次执行方法。

可通过下列配置来启用缓存的支持(注意使用新的schema):

?

  1. <beans?xmlns="http://www.springframework.org/schema/beans"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?
  2. ??xmlns:cache="http://www.springframework.org/schema/cache"?
  3. ???xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd ?
  4. ????????http://www.springframework.org/schema/cache?http://www.springframework.org/schema/cache/spring-cache.xsd">?
  5. ? ?
  6. ??<cache:annotation-driven?/>?
  7. ??... ?
  8. </beans>?

接下来可使用 @Cacheable 和 @CacheEvict 来对缓存进行操作。

?

  1. @Cacheable("persons") ?
  2. public?Person?profile(Long?personId)?{?...?}?

以上代码声明了一个名为 persons 的缓存区域,当调用该方法时,Spring 会检查缓存中是否存在 personId 对应的值。

也可以指定多个缓存区域,当你在应用有需要这样做的话:

?

  1. @Cacheable({"persons",?"profiles"}) ?
  2. public?Person?profile(Long?personId)?{?...?}?

当指定多个区域时,Spring 会一个个的检查,一旦某个区域存在指定值时则返回。

而 @CacheEvict 则用来从缓存中清除数据,例如:

?

  1. @CacheEvict?(value?=?"persons",?allEntries=true) ?
  2. public?List<Person>?listPersons()?

@CacheEvict 可以指定清除缓存的条件。

还可以指定缓存的Key:

?

  1. @Cacheable(value="persons",?key="personId") ?
  2. public?Person?profile(Long?personId,?Long?groundId)?{?...?}?

或者根据条件决定是否缓存:

?

  1. @Cacheable(value="persons",?condition="personId?>?50") ?
  2. public?Person?profile(Long?personId)?{?...?}?

缓存管理器的配置:

?

  1. <!--?generic?cache?manager?-->?
  2. <bean?id="cacheManager"?class="org.springframework.cache.support.SimpleCacheManager">?
  3. ??<property?name="caches">?
  4. ????<set>?
  5. ??????<bean?class="org.springframework.cache.concurrent.ConcurrentCacheFactoryBean"?p:name="default"/>?
  6. ??????<bean?class="org.springframework.cache.concurrent.ConcurrentCacheFactoryBean"?p:name="persons"/>?
  7. ????</set>?
  8. ??</property>?
  9. </bean>?

基于?Ehcache?缓存的配置:

?

  1. <bean?id="cacheManager"?class="org.springframework.cache.ehcache.EhcacheCacheManager"?p:cache-manager="ehcache"/>?
  2. ? ?
  3. <!--?Ehcache?library?setup?-->?
  4. <bean?id="ehcache"?class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"?p:config-location="ehcache.xml"/>??

如果你看不懂上面的内容,那请看?洋文版。

  相关解决方案