当然我们在平时的使用过程过程中,都是使用redis来做分布式缓存,而且一般在业务逻辑中,接口这种命中率比较低,而且还要考虑缓存淘汰算法的选取,所以一般应用不多。但是spring既然有这么个功能,我们就来看看,这里参照前辈的Spring5-Design-Patterns来写这篇博客。
这里需要使用@EnableCaching注解来开启缓存,然后之类还需要一个缓存管理器,这里使用ConcurrentMapCacheManager,这个实现后续再看。
这里再使用@CachePut("accountCache")来标记这个缓存,但是我看这里面的注解选项,好像没有缓存时间,然后我们就可以使用啦
输出:
可供选择的有这些,简单介绍三种:
- value (也可使用 cacheNames) : 可看做命名空间,表示存到哪个缓存里了。
- key : 表示命名空间下缓存唯一key,使用Spring Expression Language(简称SpEL,详见参考文献[5])生成。
- condition : 表示在哪种情况下才缓存结果(对应的还有unless,哪种情况不缓存),同样使用SpEL
这里主要使用的有三个注解:
@Cacheable 主要针对方法配置。能够依据方法的请求參数对其结果进行缓存
@CachePut 主要针对方法配置,能够依据方法的请求參数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实方法的调用
@CachEvict 主要是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作
这里可以知道第二次查询的时候,是从缓存中取的,这里的依赖有:
感觉可供选择的还是比较少的,不是特别实用,在复杂的业务场景前。
参考:
git@github.com:PacktPublishing/Spring5-Design-Patterns.git
https://www.cnblogs.com/fashflying/p/6908028.html