1 缓存目的
由于M/S调度过程中,会产生大量数据库读操作,如tenant,user,processDefinition等:
- 对DB产生很大读压力
- 使整个核心调度流程变慢
考虑这部分业务数据读多写少,引入缓存模块:减少DB读压力,加快核心调度流程。
2 缓存设置
spring:
cache:
# default enable cache, you can disable by `type: none`
type: none
cache-names:
- tenant
- user
- processDefinition
- processTaskRelation
- taskDefinition
caffeine:
spec: maximumSize=100,expireAfterWrite=300s,recordStats
缓存模块采用spring-cache机制,可直接在spring配置文件中配置是否开启缓存(默认none
关闭), 缓存类型;
采用caffeine缓存管理,可自由设置缓存相关配置,如缓存大小、过期时间等;
3 缓存读取
缓存采用spring-cache的注解,配置在相关mapper层,可参考如:TenantMapper
.
4 缓存更新
业务数据的更新来自于api-server, 而缓存端在master-server, 故需要对api-server的数据更新做监听(aspect切面拦截@CacheEvict
),当需要进行缓存驱逐时会通知master-server,master-server接收到cacheEvictCommand后进行缓存驱逐;
缓存更新的兜底策略来自于用户在caffeine中的过期策略配置,结合业务配置。
5 时序图
参考: 编程严选网
标签:缓存,07,spring,DolphinScheduler,caffeine,server,cache,master,Apache From: https://blog.51cto.com/JavaEdge/8330128