多模块项目使用枚举配置 spring-cache 缓存
一、前言
近期被刷接口了,考虑增加 本地缓存提高性能,另配置 限流
使用 spring-cache 注解式缓存,可以提高使用缓存的开发效率
不同业务,可以定制 自己的缓存策略,是基本需求
多模块项目,最好在 统一的模块(如 common) 加载缓存配置
二、方案
1. 配置缓存:接口 + 枚举 + Lombok
缓存配置接口:
common 模块缓存配置(使用 Lombok 的 FieldNameConstants 自动生成 常量):
业务模块缓存配置:
2. 多模块配置加载:Reflections + SimpleCacheManager
通过 Reflections 库加载多模块配置
SimpleCacheManager 组合 各种不同配置的 缓存
3. 使用缓存
使用 @Cacheable(cacheNames = CommonCacheConfig.Fields.QUOTE_LEVEL, sync = true) 操作缓存
使用 Lombok 的 FieldNameConstants 自动生成的 常量:
三、总结
通过 接口 + 枚举,业务模块不用改 common 模块, 新增枚举 就能 方便的配置、使用缓存,符合 开闭原则
通过 Lombok 的 FieldNameConstants 自动生成 枚举名称常量,便于代码 导航、重构
通过 Reflections 库,common 模块自动加载 各模块的缓存配置,SimpleCacheManager 组合 各种不同配置的 缓存(CaffeineCacheManager 不能),降低使用成本,提高可维护性
sync = true,加锁,只有一个线程去加载数据,其他线程阻塞,防止 缓存击穿
alibaba/jetcache:支持 注解上指定过期时间等配置、两级缓存、自动刷新和加载保护 等
netease-im/camellia:网易开源,有意思的是 支持基于注解执行 mget,mevict 等批量操作
本文首先发布于 https://www.890808.xyz/ ,其他平台需要审核更新慢一些。
版权声明: 本文为 InfoQ 作者【javalover123】的原创文章。
原文链接:【http://xie.infoq.cn/article/2796191b3b23bada02934939a】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论