写在前面的话
在开始spring中缓存注解的用法解析前,先了解一下缓存是什么以及为什么要用缓存
缓存是什么
这里所涉及到的缓存都是指的web中的缓存。就是当你请求数据时,会优先从缓存中获取,如果未命中(就是缓存不存在),才去请求访问数据库,获取到数据后将数据加入到缓存中。
为什么要用缓存
一个需要大量重复调用的请求,用户每次调用都会触发一个数据库读取操作,当用户越来越多、数据量越大越大的时候,请求的时间将会变长,数据库可能会崩溃,而且用户体验也不太好。这个时候缓存就可以上场了。
Spring中的cache注解
spring中一共提供了五个关于缓存的注解,下面来逐个分析。
注意:注解一定要加在service层的实现类上,而不是controller,也不是service的接口上
@CacheConfig
该注解只能用于类上面,主要用来配置一些公用的缓存配置,比如value(一般都是在@CacheConfig配置value)
例如:@CacheConfig(value = “usersService”)
如果在@CacheConfig配置了value,那么在方法级别的注解上都将不需要配置value,因为他们公用一个value。
@Cacheable
该注解用于标识方法需要缓存,能够对其结果进行缓存,这也就是通常意义上的缓存。
该注解还有另外三个参数:key、condition、unless
- key:缓存名,所在命名空间内需唯一
key可以不写,spring会使用默认策略生成,但在正确使用缓存时,我们还是需要自定义key(使用springEL表达式)。关于key的自定义,请参考Spring @Cacheable 的key生成 - condition:根据参数控制是否需要进行缓存。(也是使用springEL表达式)
例如:id 为3 的不缓存
@