spring cache介绍
Spring Cache
就是一个这个框架。它利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了。而且Spring Cache也提供了很多默认的配置。
CacheManager
是spring提供的各种缓存技术抽象接口,用来统一不同的缓存技术,不同技术有不同的CacheManager。
导入坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
配置
spring:
redis: #如果有密码要配置password
host: 127.0.0.1
port: 6379
database: 0
cache:
redis:
time-to-live: 1800000 #设置缓存的过期时间30min
常用注解
注解 | 说明 |
---|---|
@EnableCaching | 开启spring cache注解方式的缓存功能,一般加在启动类上 |
@Cacheable | 在该方法执行之前该方法前,spring会去检查是否缓存中已经有值,如果有就直接返回,不调用方法。如果没有,就调用方法,然后把结果缓存起来。一般用在查询方法上 |
@CachePut | 把方法的返回值put到缓存里面缓存起来,供其它地方使用。通常用在新增方法上。 |
@CacheEvict | 使用了CacheEvict注解的方法,会清空指定缓存。一般用在更新或者删除的方法上 |
使用案例
@Cacheable(value = "setmealCache" ,key = "#a")
public User list(Long a,User user){
return null;
}
key = "#categoryId+'_'+#status"
public class R<T> implements Serializable
参数说明:
value
: value属性是必须指定的,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称。其可以是一个Cache也可以是多个Cache,当需要指定多个Cache时其是一个数组。
key
:key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL
表达式。
上面的代码中key还可以这样写:
key = "#a"//使用参数的名称
key = "#p0"//这里的P是固定的,后面的数字代表第几个参数
key = "#user.id"
key = "#p1.id"
//还可以通过拼接字符串动态生成key
key = "#a+'_'+#user.id"
注意: 如果报错:java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type
是因为没有序列化User,只需要在User上加上implements Serializable
即可解决:
public class User implements Serializable