cache在spring中使用

时间:2022-05-12 21:48:07

一:参考文章

(1)http://haohaoxuexi.iteye.com/blog/2123030  Spring使用Cache,这篇文章讲的比较详细。

注:本文是对参考文章和实际使用中经验的总结。

二:核心思想

  在spring中,cache是作用在方法上的。

  当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。

三:基于注解的方法

  在spring中使用cache时,一是需要声明哪些方法需要使用cache;二是配置spring对cache的支持,配置方法主要有基于注解和基于xml的方法。本文主要介绍基于注解的方法。

(1)@Cacheable

  @Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。Spring在缓存方法的返回值时是以键值对进行缓存的,值就是方法的返回结果。

  键有两种策略,一种是默认策略,另一种是自定义策略。

  @Cacheable可以指定三个属性,value、key和condition。其中(1)value指定cache名称,表示缓存被放在哪个cache上。(2)key是对缓存的唯一索引,确定了哪个cache上的哪个key值,相应的缓存值就能得到了,采用SpringEL表达式来指定。(3)condition是执行缓存的条件,其值是通过SpringEL表达式来指定的,当为true时表示进行缓存处理;当为false时表示不进行缓存处理,即每次调用该方法时该方法都会执行一次。

  @RequestMapping(params="CacheTest")
    @Cacheable(value="mycache",key="#value")
    @ResponseBody
    public String CacheTest(String value){
        System.out.println("value:"+value);
        return value;
    }

  上例表示CacheTest方法采用缓存,缓存放在mycache上,采用CacheTest方法的参数value来作为key,condition默认为空,即缓存所有调用。