spring使用cache

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring使用cache相关的知识,希望对你有一定的参考价值。

考虑两方面:

i) 声明某些方法使用缓存(注解方式)

ii) 配置Spring对Cache的支持。

一、基于注解的支持

一般我们常用的注解:@Cacheable和@CacheEvict。

1.1、@Cacheable

@Cacheable既可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记一个类上时则表示该类所有的方法都是支持缓存的。

它有三个属性:value、key和condition

1、value属性(必须的)

指定Cache名称,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称。可以是一个也可以是多个,当指定多个时其是一个数组。

2、key属性(可选,有默认)

是用来指定Spring缓存方法的返回结果时对应的key。当我们没有指定该属性时,Spring将使用默认策略生成key。

自定义策略是指可以通过Spring的EL表达式来指定key。这里的EL表达式可以使用方法参数及它们对应的属性。使用方法参数时直接使用“#参数名”或者“#p参数index”

3、condition(可选,默认为空,表示将缓存所有的调用情形)

指明该方法的返回结果是否被缓存。

总结:

当执行到一个被@Cacheable注解的方法时,Spring首先检查condition条件是否满足。

如果不满足,执行方法,返回;

如果满足,在value所命令的缓存空间中查找使用key存储的对象,如果找到,将找到的结果返回,如果没有找到执行方法,将方法的返回值以key-对象的方式存入value缓存中,然后方法返回。

二、配置Spring对Cache的支持

1、xml文件中增加命名空间

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,有一个cache-manager属性用来指定当前所使用的CacheManager对应的bean的名称,默认是cacheManager -->
  <cache:annotation-driven/>
</beans>

 

 

<cache:annotation-driven/>有一个cache-manager属性用来指定当前所使用的CacheManager对应的bean的名称,默认是cacheManager

2、配置CacheManager

CacheManager是Spring定义的一个用来管理Cache的接口。Spring自身已经为我们提供了两种CacheManager的实现。一种是基于Java API的ConcurrentMap,另一种是基于第三方Cache实现--EhCache.。

基于ConcurrentMap的配置

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<!--xxxx对应@Cacheable中的value-->
<property name="name" value="xxxx"/>
</bean>
</set>
</property>
</bean>

 

 

完成以上步骤后,可进行测试下。

第一次调用时,走其中的方法,第二次不走其中方法,直接从缓存中抽取.

















以上是关于spring使用cache的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cache

Spring Boot (24) 使用Spring Cache集成Redis

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

Spring Cache 缓存

Spring boot 拾遗 —— Spring Cache 使用 Jackson 与 自定义 TTL

spring使用@Cache的简单实现