3.3 KiB
3.3 KiB
Caffeine缓存迁移指南
概述
本项目已将原有的Redis缓存替换为基于Caffeine的本地缓存,以提升性能并减少对外部Redis服务的依赖。
主要变更
1. 新增依赖
- 添加了Caffeine 2.9.3依赖
- 保留了Guava依赖用于向后兼容
2. 新增组件
Caffeine缓存模板
AbstractCaffeineCacheTemplate<T>: 位于agileboot-infrastructure模块- 提供标准化的Caffeine缓存操作接口
- 支持自动从数据库加载数据
- 包含缓存统计和监控功能
Caffeine缓存服务
CaffeineCacheService: 位于agileboot-domain模块- 替换原有的
RedisCacheService - 管理以下缓存:
- 验证码缓存 (
captchaCache) - 登录用户缓存 (
loginUserCache) - 用户实体缓存 (
userCache) - 角色实体缓存 (
roleCache) - 岗位实体缓存 (
postCache)
- 验证码缓存 (
缓存配置
CaffeineCacheConfig: 提供Caffeine缓存的全局配置- 支持自定义缓存参数
3. 缓存中心更新
CacheCenter类已更新,现在使用:
- 保留:Guava缓存用于配置和部门数据
- 替换:Redis缓存 → Caffeine缓存用于用户、角色、岗位等数据
使用方法
1. 获取缓存数据
// 从缓存中获取用户数据
SysUserEntity user = CacheCenter.userCache.get("1");
// 从缓存中获取角色数据
SysRoleEntity role = CacheCenter.roleCache.get("1");
2. 使缓存失效
// 使单个缓存失效
CacheCenter.userCache.invalidate("1");
// 使所有缓存失效
CacheCenter.userCache.invalidateAll();
3. 监控缓存
通过API接口
访问:GET /monitor/caffeine/stats
通过代码
@Autowired
private CaffeineCacheService caffeineCacheService;
String stats = caffeineCacheService.getCacheStats();
System.out.println(stats);
缓存配置参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| maximumSize | 1024 | 最大缓存数量 |
| expireAfterWrite | 60分钟 | 写入后过期时间 |
| refreshAfterWrite | 5分钟 | 写入后刷新时间 |
| concurrencyLevel | 16 | 并发级别 |
| initialCapacity | 128 | 初始容量 |
| softValues | true | 使用软引用 |
性能对比
| 特性 | Redis | Caffeine |
|---|---|---|
| 访问延迟 | 网络延迟 | 内存访问 |
| 数据一致性 | 分布式 | 本地 |
| 内存使用 | 独立服务 | 应用内存 |
| 适用场景 | 分布式缓存 | 本地高速缓存 |
迁移注意事项
- 数据一致性:Caffeine是本地缓存,多实例部署时数据可能不一致
- 内存使用:监控应用内存使用情况,避免缓存过多数据
- 缓存失效:确保在数据更新时正确使缓存失效
- 监控:定期检查缓存命中率和统计信息
回滚方案
如需回滚到Redis缓存:
- 恢复
CacheCenter中的Redis缓存引用 - 移除Caffeine相关依赖
- 重启应用
故障排查
常见问题
- 缓存不生效:检查
@PostConstruct方法是否正确初始化 - 内存溢出:调整
maximumSize和expireAfterWrite参数 - 数据不一致:确保数据更新时正确调用
invalidate方法
调试方法
// 查看缓存统计
System.out.println(CacheCenter.userCache.getStats());
// 手动触发缓存加载
CacheCenter.userCache.get("test-key");