整理项目

This commit is contained in:
2025-07-09 17:56:02 +08:00
parent 6178b63da3
commit fd7834821e
5 changed files with 3 additions and 3 deletions

346
docs/设计文档.md Normal file
View File

@@ -0,0 +1,346 @@
# 秒杀系统详细设计文档
## 1. 项目概述
### 1.1 项目背景
基于Spring Boot + Redis + MySQL构建的高并发秒杀系统重点展示Redis在分布式场景下的应用。
### 1.2 技术栈
- **后端框架**: Spring Boot 2.7.6
- **缓存**: Redis Cluster集群
- **数据库**: MySQL
- **前端**: JSP
- **开发语言**: Java 1.8
### 1.3 核心特性
- Redis五种数据类型的综合应用
- 分布式锁防止超卖
- 库存预热和原子扣减
- 接口限流控制
- 购物车Hash存储
- Pub/Sub消息队列
- Lua脚本原子操作
- 管道技术性能优化
## 2. 系统架构设计
### 2.1 整体架构
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端JSP页面 │ │ Spring Boot │ │ Redis Cluster │
│ │ │ 应用服务器 │ │ │
│ - 商品展示 │◄──►│ │◄──►│ - 缓存层 │
│ - 秒杀页面 │ │ - Controller │ │ - 分布式锁 │
│ - 购物车 │ │ - Service │ │ - 消息队列 │
│ - 订单管理 │ │ - Repository │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
┌─────────────────┐
│ MySQL │
│ │
│ - 用户数据 │
│ - 商品数据 │
│ - 订单数据 │
└─────────────────┘
```
### 2.2 Redis集群拓扑图
```
Redis Cluster (42.192.62.91)
┌─────────────────────────────────────────────────────────────┐
│ Master Nodes │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ :7000 │ │ :7001 │ │ :7002 │ │
│ │ Slot │ │ Slot │ │ Slot │ │
│ │ 0-5460 │ │5461-10922│ │10923-16383│ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ :7003 │ │ :7004 │ │ :7005 │ │
│ │ Replica │ │ Replica │ │ Replica │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ Slave Nodes │
└─────────────────────────────────────────────────────────────┘
```
## 3. 数据库设计
### 3.1 用户表 (users)
```sql
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 3.2 商品表 (products)
```sql
CREATE TABLE products (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL DEFAULT 0,
image_url VARCHAR(500),
status TINYINT DEFAULT 1 COMMENT '1:上架 0:下架',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 3.3 秒杀活动表 (flash_sales)
```sql
CREATE TABLE flash_sales (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
product_id BIGINT NOT NULL,
flash_price DECIMAL(10,2) NOT NULL,
flash_stock INT NOT NULL,
start_time TIMESTAMP NOT NULL,
end_time TIMESTAMP NOT NULL,
status TINYINT DEFAULT 1 COMMENT '1:未开始 2:进行中 3:已结束',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (product_id) REFERENCES products(id)
);
```
### 3.4 订单表 (orders)
```sql
CREATE TABLE orders (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL,
total_price DECIMAL(10,2) NOT NULL,
status TINYINT DEFAULT 1 COMMENT '1:待支付 2:已支付 3:已发货 4:已完成 5:已取消',
order_type TINYINT DEFAULT 1 COMMENT '1:普通订单 2:秒杀订单',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
```
## 4. Redis数据结构设计
### 4.1 String类型应用
```
# 分布式锁
flash_sale_lock:{product_id} = "locked"
# 接口限流
rate_limit:{user_id}:{api} = count
# 用户token
user_token:{token} = user_id
```
### 4.2 Hash类型应用
```
# 用户信息缓存
user:{user_id} = {
"username": "张三",
"email": "zhangsan@example.com",
"phone": "13800138000"
}
# 商品信息缓存
product:{product_id} = {
"name": "iPhone 15",
"price": "5999.00",
"stock": "100",
"status": "1"
}
# 购物车
user:{user_id}:cart = {
"product_1": "2",
"product_2": "1"
}
```
### 4.3 List类型应用
```
# 订单队列
order_queue = [order_id1, order_id2, order_id3]
# 用户操作日志
user:{user_id}:logs = [log1, log2, log3]
```
### 4.4 Set类型应用
```
# 秒杀成功用户集合
flash_sale:{product_id}:success_users = {user_id1, user_id2}
# 在线用户集合
online_users = {user_id1, user_id2, user_id3}
```
### 4.5 ZSet类型应用
```
# 商品销量排行榜
product_sales_rank = {
product_id1: sales_count1,
product_id2: sales_count2
}
# 用户积分排行榜
user_score_rank = {
user_id1: score1,
user_id2: score2
}
```
## 5. 核心功能设计
### 5.1 秒杀流程设计
```
用户请求秒杀
接口限流检查 (INCR + EXPIRE)
获取分布式锁 (SETNX)
检查库存 (GET)
原子扣减库存 (DECR)
创建订单
释放锁 (DEL)
发送消息通知 (PUBLISH)
```
### 5.2 购物车设计
```
添加商品到购物车
HSET user:{user_id}:cart {product_id} {quantity}
设置过期时间 (EXPIRE)
异步同步到MySQL
```
## 6. 关键技术实现
### 6.1 分布式锁实现
使用SETNX + EXPIRE实现分布式锁防止秒杀超卖问题。
### 6.2 库存预热
活动开始前将商品库存加载到Redis使用DECR进行原子扣减。
### 6.3 接口限流
使用INCR + EXPIRE组合实现滑动窗口限流。
### 6.4 Lua脚本
编写Lua脚本保证秒杀操作的原子性。
### 6.5 消息队列
使用Redis Pub/Sub实现订单状态变更通知。
### 6.6 管道技术
批量操作使用Pipeline提高性能。
## 7. 性能优化策略
### 7.1 缓存策略
- 热点数据预加载
- 多级缓存架构
- 缓存穿透防护
### 7.2 并发控制
- 分布式锁
- 乐观锁
- 队列削峰
### 7.3 数据库优化
- 读写分离
- 分库分表
- 索引优化
## 8. 监控和运维
### 8.1 监控指标
- Redis集群状态
- 接口响应时间
- 系统并发量
- 错误率统计
### 8.2 日志记录
- 操作日志
- 错误日志
- 性能日志
## 9. 部署架构
### 9.1 环境要求
- JDK 1.8+
- Redis Cluster
- MySQL 5.7+
- Tomcat 9.0+
### 9.2 部署步骤
1. 配置Redis集群
2. 初始化MySQL数据库
3. 部署Spring Boot应用
4. 配置负载均衡
## 10. 测试计划
### 10.1 功能测试
- 用户注册登录
- 商品浏览
- 购物车操作
- 秒杀功能
- 订单管理
### 10.2 性能测试
- 并发用户测试
- 秒杀压力测试
- 系统稳定性测试
### 10.3 压力测试指标
- QPS: 目标10000+
- 响应时间: <100ms
- 成功率: >99.9%