引言
上一篇文章Cache在Springboot中的实现与原理已经介绍了Spring Cache在SpringBoot中的实现与原理, 本文就来聊一聊如何在使用spring cache的时候结合本地缓存 + redis. 也就是自定义两级缓存.
1: 自定义缓存的原理
上一篇文章中已经提到, Cache接口定义了缓存操作的行为,CacheManager定义了如何产生Cache,我们需要定义自己的两级Cache
,所以我们就需要定义自己的Cache
与CacheManager
。在Spring已经帮我们提供了一个CacheManager的实现类CompositeCacheManager
。
2:如何实现
设计与实现思路
- 这里我们采用Caffeine(一级缓存) + Redis(二级缓存)。实现效果的流程图如下:
2. 需要的关键类与接口
- CompositeCacheManager:它是组合CacheManager的一个实现,其中它的
setCacheManagers
方法允许设置一个或者多个CacheManager。 - Cache:定义缓存操作的行为,比如我们可以存到Redis或者内存中等,都可以由我们自己来实现
- CacheSyncManager: 自定义缓存同步管理接口,定义了如何进行缓存的同步, 比如使用Redis发布订阅或者RabbitMq消息来实现缓存的同步
- CaffeineRedisCacheManager:组合CacheManager, 存储自定义两级缓存
- MultipleCache:Cache的具体实现
- MultipleCacheNode:缓存节点, 本地+Redis
3. 部分代码及其实现
CacheManager相关如下:
1 | java复制代码@Bean |
Cache相关如下:
1 | java复制代码public class MultipleCache implements Cache { |
CacheSync相关:
1 | java复制代码@Bean(name = "redisCacheMessageSyncListenerContainer") |
使用spring.factories机制来确保能被SpringBoot工程扫描到
1 | yml复制代码org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ |
以上就是关键部分的代码,总的来说关键部分就是:
- 1: 实现自己的CacheManager
- 2: 实现自己的Cache
- 3: 实现本地缓存之间的同步
如何使用
1:在启动类上加上@EnableCaching
1 | java复制代码@EnableCaching |
2:配置Cache的属性信息
1 | yml复制代码spring: |
3: 使用方式没有任何变化,还是基于注解的形式即可。
1 | java复制代码@RestController |
4:效果
5:依赖相关
1 | pom复制代码<?xml version="1.0" encoding="UTF-8"?> |
传送门
最后附上 github链接
本文转载自: 掘金