1. 项目背景与核心价值
在微服务架构盛行的当下,缓存技术已经成为提升系统性能的标配组件。但实际开发中我们常常面临这样的困境:本地缓存(如Caffeine)和分布式缓存(如Redis)各有优劣,业务初期可能只需要本地缓存,随着规模扩大又不得不重构代码接入Redis。更麻烦的是在多租户场景下,如何优雅实现租户间的缓存隔离?
这个项目实现了一套Spring Boot缓存抽象层,通过极简配置即可在Caffeine和Redis之间无缝切换,同时自动处理多租户隔离问题。我在电商中台项目中落地这套方案后,缓存相关代码量减少70%,租户隔离问题彻底解决,不同环境(开发/测试/生产)可以自由选择最适合的缓存方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 架构设计与核心原理
2.1 总体架构设计
整个方案建立在Spring Cache抽象之上,通过自定义CacheManager实现缓存策略的动态路由。核心架构分为三层:
- 配置层:通过@Enable注解激活功能,支持properties/YAML配置
- 适配层:实现AbstractCacheManager,动态创建Caffeine/Redis缓存实例
- 租户层:基于ThreadLocal的租户上下文,自动注入缓存key前缀
java复制public class DynamicCacheManager extends AbstractCacheManager {
@Override
protected Cache getMissingCache(String name) {
// 根据配置决定创建Caffeine还是Redis Cache
if(config.isRedisMode()) {
return new RedisCacheWrapper(name, redisTemplate);
} else {
return new CaffeineCacheWrapper(name, caffeineBuilder);
}
}
}
2.2 多租户隔离实现
租户隔离的核心在于缓存key的自动修饰。我们通过AOP在缓存操作前自动注入租户ID:
1
