关于Spring Cache
在Spring3.1以后增加了一项happy的技术点,就是基于注解来实现缓存的技术。他的本质上不是具体的缓存方案实现,而是一个对缓存的抽象,让我们通过注解,实现少量的代码,达到实现缓存的方案。
Cacheable的说明
@Cacheable注解是用在方法上面的!用来表示该方法返回结果存放在缓存中,当在使用相同参数调用该方法的时候,会优先在缓存中查找,不会立即执行下面的方法!
重点来了哦!这里面说的“相同参数”一定要正确理解,也就是说同一个方法使用了@Cacheable注解,但是有不同的参数组合来调用这个方法,则会才产生你的组合数个key来存储缓存数据!
好了,接下来我们看一下,这注解的每个参数具体含义:
value/cacheNames
用来指定缓存名,这两个含义是相同的,选其一使用即可。 使用方法如下:
@Cacheable(cacheNames = "busroute")
@Override
public List<BusLineResp> findAllBusLines() throws ParamException {
return null;
}
定义的是:点调用该方法的时候会检查busroute缓存,如果命中,则不会执行这个方法。否则执行,将结果赋值给busroute缓存起来。
key/keyGenerator
一个缓存的名称对应一个方法,这没什么问题,但是问题在于有的方法是有个参数的,这要怎么去区分缓存呢?
不需要着急,人家Spring的开发者也帮我们想到了,它使用key值来区分。使用方法如下:
@Cacheable(cacheNames = "busroute",key = "#root.methodName+'('+#lineId+')'",unless = "#result == null")
@Override
public List<BusLineStationResp> findBusLineStations(String lineId) throws ParamException {
return null;
}
这里,我们为注解增加了key参数,绑定了lineId的值,这样就可以通过busroute及lineId组合来实现!
unless
这个是执行后来判断不缓存的条件。他可以接收一个结果为false或者true的表达式,表达式可以是SpEL。当返回true时候,则不进行缓存
一般的使用如下:
@Cacheable(cacheNames = "busroute",key = "#root.methodName+'('+#lineId+')'",unless = "#result == null")
如果返回结果为null的时候则不进行缓存了!
好了,常用的@Cacheable以及他的参数就讲解到这里,欢迎大家留言交流,如有不正确的,也欢迎指正批评。
欢迎大家关注我的公号《coder练习生》