Spring 3.1 版本的缓存实现

Spring3.1 已加缓存的实现,今天主要介绍一下Spring Cache的基本使用,要想使你的程序具体缓存的功能,首先需要在配置文件中增加以下配置:

1、如果使用Annotation 方式配置缓存,需要有以下配置:

<cache:annotation-driven />
 
默认的缓存管理器的名字为cacheManager,如果需要指定缓存管理器名称,需要指定其名称
如:
<cache:annotation-driven cache-manager="cacheManager"/>
    

设置好注解配置过后,需要设置缓存管理器。

<!-- 缓存管理器声明-->
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
    <property name="caches">
    <set>
        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>     
        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="base"/>          
    </set>
    </property>
</bean>

当前配置的是用ConcurrentMap作为缓存容器,当然,也可以自定义缓存容器,具体参见srping 文档,上述配置指定的两个缓存管理器,分别为:default,base。

完整配置如下:

   1:  <beans xmlns="http://www.springframework.org/schema/beans"
   2:      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   3:      xmlns:cache="http://www.springframework.org/schema/cache"
   4:      xmlns:p="http://www.springframework.org/schema/p"
   5:      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   6:          http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
   7:      
   8:      
   9:      <cache:annotation-driven cache-manager="cacheManager"/>
  10:      
  11:   
  12:      <!-- 缓存管理器声明-->
  13:      <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
  14:          <property name="caches">
  15:          <set>
  16:              <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>     
  17:              <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="base"/>          
  18:          </set>
  19:          </property>
  20:      </bean>
  21:   
  22:  </beans>

2、XML配置好过后,如何在程序中使用,请看下面介绍

如果需要缓存某个业务的字典数据,可直接在方法增加Cacheable标

    
    @Cacheable(value = "base", key = "#root.methodName")
    public List<String> getCredits()
    {
        logger.info("开始查询证件类型");
        List<String> credits = new ArrayList<String>();
        credits.add("身份证");
        credits.add("军官证");
        credits.add("学生证");
        return credits;
    }

在该方法上增加@Cacheable注解,Spring会自动把返回的数据加到缓存中,并且把数据缓存在base容器中,同时设定的key的名称为: 方法名。
key的名称定可以采用SPEL表达式。

 

    @Cacheable(value = "base", key = "#type")
    public List<String> findSeats(String type) {
        
        List<String> seats = new ArrayList<String>();
        if ("seat".equals(type)) {
            logger.info("开始查询席位类型");
            int base = 97;
            // 构建Seat记录
            for (int i = 0; i < 26; i++) {
                int tmp = base + i;
                seats.add(String.valueOf((char) tmp));
            }
        }

        else if ("ticket".equals(type)) {
            logger.info("开始查询票种类型");
            int base = 65;
            // 构建Seat记录
            for (int i = 0; i < 26; i++) {
                int tmp = base + i;
                seats.add(String.valueOf((char) tmp));
            }
        }
        return seats;
    }

该示例演示了,缓存的数据以type为key。

3、缓存数据更新

示例:

 

    /**
     * 当发生席位记录变更,需要清除现有的缓存。
     */
    @CacheEvict(value = "base", key = "#type")
    public void updateSeats(String type) {

        logger.info("开始更新席位记录");

    }

在更新的方法中,增加@CacheEvict 注解,并且要指定需要更新的是哪个容器和key,如果没有指定key,那该容器的所有数据都会更新。

你可能感兴趣的:(Spring 3.1 版本的缓存实现)