# Redis-Caffeine
**Repository Path**: SecretGarden3/Redis-Caffeine
## Basic Information
- **Project Name**: Redis-Caffeine
- **Description**: 利用Redis+Caffeine实现二级缓存,使用上客户端的本地缓存来储存客户订单信息。
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-07-23
- **Last Updated**: 2025-07-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Redis_Caffeine 项目概述
## 1. 项目架构与技术栈
### 核心框架
- **Spring Boot**: 3.5.3
- **持久层**: MyBatis + MySQL 8.0
- **缓存系统**: Redis + Caffeine 二级缓存
- **API风格**: RESTful
- **构建工具**: Maven
- **JDK版本**: 17
### 关键依赖
| 功能 | 依赖 |
|------|------|
| Web支持 | `spring-boot-starter-web` |
| 缓存抽象 | `spring-boot-starter-cache` |
| Redis客户端 | `spring-boot-starter-data-redis` (Lettuce) |
| 本地缓存 | Caffeine |
| ORM框架 | MyBatis |
| 数据库连接 | MySQL Connector |
| 简化代码 | Lombok |
| AOP支持 | `spring-boot-starter-aop` |
## 2. 项目结构
```
src/
├── main/
│ ├── java/com/example/redis_caffeine/
│ │ ├── config/ # 配置类
│ │ │ └── RedisConfig.java # Redis序列化与连接配置
│ │ ├── controller/ # API控制器
│ │ │ └── OrderController.java # 订单管理接口
│ │ ├── entity/ # 实体类
│ │ │ └── Order.java # 订单实体
│ │ ├── mapper/ # MyBatis映射器
│ │ │ └── OrderMapper.java # 订单数据访问
│ │ ├── service/ # 业务逻辑
│ │ │ ├── OrderService.java # 订单服务接口
│ │ │ └── impl/ # 服务实现
│ │ │ └── OrderServiceImpl.java # 订单服务实现
│ │ └── RedisCaffeineApplication.java # 应用入口
│ └── resources/
│ ├── application.yml # 主配置文件
│ └── mapper/ # MyBatis XML映射
│ └── OrderMapper.xml # 订单SQL定义
└── test/ # 测试代码
└── java/com/example/redis_caffeine/ # 测试包结构
```
## 3. 核心功能模块
### 3.1 订单管理
- **数据模型** (`Order.java`)
```java
private Long id; // 订单ID
private Long userId; // 用户ID
private Long voucherId; // 优惠券ID
private Integer payType; // 支付方式
private Integer status; // 订单状态
private LocalDateTime createTime; // 创建时间
private LocalDateTime updateTime; // 更新时间
// 其他时间字段: payTime, useTime, refundTime
```
- **API接口** (`OrderController.java`)
| 方法 | 路径 | 功能 |
|--------|---------------|----------|
| GET | `/order/{id}` | 查询订单 |
| PUT | `/order/{id}` | 更新订单 |
| DELETE | `/order/{id}` | 删除订单 |
- **数据访问** (`OrderMapper.xml`)
- 查询: `select * from tb_order where id = #{id}`
- 更新: 全字段更新(含`update_time = NOW()`)
- 删除: 根据ID删除
### 3.2 缓存系统
#### 多级缓存策略
1. **本地缓存**: Caffeine
- 配置: 默认缓存120秒
- 应用: 订单查询结果本地缓存
2. **分布式缓存**: Redis
- 配置:
```yaml
spring:
redis:
host: 127.0.0.1
port: 6379
database: 8
timeout: 5000ms
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 2
```
#### 缓存实现
- **序列化配置**:
- Key: `StringRedisSerializer` (纯字符串)
- Value: `GenericJackson2JsonRedisSerializer` (支持对象+类型信息)
- **缓存操作** (`OrderServiceImpl.java`)
```java
// 双缓存实现 (已注释的V1版本)
orderCache.get(key, k -> {
// 1. 查Redis
// 2. 查DB
// 3. 回填缓存
});
```
## 4. 关键配置解析
### 4.1 数据库配置
```yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/hmdp?useSSL=false&serverTimezone=UTC
username: root
password: 123456
```
### 4.2 MyBatis配置
```yaml
mybatis:
mapper-locations: classpath:mapper/*.xml # XML映射位置
type-aliases-package: com.example.redis_caffeine.entity # 实体别名
configuration:
map-underscore-to-camel-case: true # 下划线转驼峰
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # SQL日志
```
## 5. 业务流程分析
### 订单查询流程
1. 接收请求: `GET /order/{id}`
2. 权限校验 (未实现)
3. 缓存查询:
- 先查Caffeine本地缓存
- 再查Redis分布式缓存
- 最后查MySQL数据库
4. 结果返回: Order对象JSON
### 缓存更新策略
- **更新操作**: 全量更新Redis + Caffeine
- **删除操作**: 同时删除两级缓存
- **过期策略**: Redis TTL 120秒, Caffeine默认策略
## 6. 待优化项
1. **异常处理**: 缺少全局异常处理器
2. **参数校验**: 接口未实现输入验证
3. **事务管理**: 仅类级别`@Transactional`
4. **缓存设计**: 未实现缓存穿透/击穿防护
5. **代码规范**: 存在大量注释代码块
6. **测试覆盖**: 测试目录为空
## 7. 部署与运行
### 环境要求
- JDK 17+
- MySQL 8.0+
- Redis 5.0+
### 启动命令
```bash
# Maven
mvn spring-boot:run
# 或打包后运行
mvn package
java -jar target/Redis_Caffeine-0.0.1-SNAPSHOT.jar
```