shop-back-end/doc/caffeine-cache-migration-gu...

128 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. 获取缓存数据
```java
// 从缓存中获取用户数据
SysUserEntity user = CacheCenter.userCache.get("1");
// 从缓存中获取角色数据
SysRoleEntity role = CacheCenter.roleCache.get("1");
```
### 2. 使缓存失效
```java
// 使单个缓存失效
CacheCenter.userCache.invalidate("1");
// 使所有缓存失效
CacheCenter.userCache.invalidateAll();
```
### 3. 监控缓存
#### 通过API接口
访问:`GET /monitor/caffeine/stats`
#### 通过代码
```java
@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 |
|------|-------|----------|
| 访问延迟 | 网络延迟 | 内存访问 |
| 数据一致性 | 分布式 | 本地 |
| 内存使用 | 独立服务 | 应用内存 |
| 适用场景 | 分布式缓存 | 本地高速缓存 |
## 迁移注意事项
1. **数据一致性**Caffeine是本地缓存多实例部署时数据可能不一致
2. **内存使用**:监控应用内存使用情况,避免缓存过多数据
3. **缓存失效**:确保在数据更新时正确使缓存失效
4. **监控**:定期检查缓存命中率和统计信息
## 回滚方案
如需回滚到Redis缓存
1. 恢复`CacheCenter`中的Redis缓存引用
2. 移除Caffeine相关依赖
3. 重启应用
## 故障排查
### 常见问题
1. **缓存不生效**:检查`@PostConstruct`方法是否正确初始化
2. **内存溢出**:调整`maximumSize`和`expireAfterWrite`参数
3. **数据不一致**:确保数据更新时正确调用`invalidate`方法
### 调试方法
```java
// 查看缓存统计
System.out.println(CacheCenter.userCache.getStats());
// 手动触发缓存加载
CacheCenter.userCache.get("test-key");
```