# redis_set_demo **Repository Path**: weijian-huang/redis_set_demo ## Basic Information - **Project Name**: redis_set_demo - **Description**: 学习项目,重点包含Redis的常见数据结构、各种使用场景,以及高并发问题的一些常见问题解决方式,如缓存一致性、分布式锁。目前正在做改造升级,想做成一个完整的业务项目正式上线。已经加了视频播放、分片上传、用户登录、学习记录等功能,后续还会开发学习社区、消息推送、AI机器人、AI学情分析等 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-26 - **Last Updated**: 2025-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, React ## README # Redis学习平台订单模块文档 ## 🎯 **当前状态** ✅ **完整版已实现** - 包含所有核心功能 ## 📋 **已实现功能** ### 🗃️ **实体类** - ✅ `Order.java` - 完整的订单实体,支持库存相关字段 - ✅ `PaymentRecord.java` - 支付记录实体 - ✅ `PaymentMethod.java` - 支付方式枚举 - ✅ `PaymentStatus.java` - 支付状态枚举 - ✅ `OrderStatus.java` - 订单状态枚举(5种状态) ### 💾 **数据库** - ✅ `t_order` 表 - 完整的订单表结构 - ✅ `t_payment_record` 表 - 支付记录表 - ✅ 所有必要的索引和字段 ### 🔗 **接口实现** - ✅ **创建订单** `POST /api/order/create` - 含Redis分布式锁、库存预减、30分钟过期 - ✅ **查询订单** `GET /api/order/list` - 用户订单列表 - ✅ **订单支付** `POST /api/order/pay` - 更新订单状态、扣减库存、记录支付信息 - ✅ **取消订单** `POST /api/order/cancel` - 用户主动取消、恢复库存 - ✅ **初始化库存** `POST /api/order/init-stock` - 开发测试用 ### 🔒 **核心机制** - ✅ **Redis分布式锁** - 防止重复提交和超卖 - ✅ **库存预减** - Redis原子操作保证库存准确性 - ✅ **30分钟过期** - Redis键过期 + 定时任务自动取消 - ✅ **库存恢复** - 取消订单时自动恢复Redis库存 - ✅ **支付记录** - 完整的支付流水记录 ## 🚀 **API接口文档** ### 1. 创建订单 ```http POST /api/order/create Content-Type: application/json { "courseId": 1 } ``` **功能说明:** - 分布式锁防重复提交 - Redis库存预减 - 30分钟有效期 - 自动生成订单号 ### 2. 查询订单列表 ```http GET /api/order/list ``` **返回示例:** ```json { "code": 200, "data": [ { "orderId": 1, "orderNo": "ORD1234567890", "courseTitle": "Java入门课程", "courseCover": "http://xxx.com/cover.jpg", "amount": 99.00, "status": 1, "createTime": "2024-01-01 12:00:00", "expireTime": "2024-01-01 12:30:00" } ] } ``` ### 3. 订单支付 ```http POST /api/order/pay Content-Type: application/json { "orderId": 1, "paymentMethod": 1 } ``` **支付方式:** - 1: 支付宝 - 2: 微信 - 3: 银行卡 - 4: 余额 ### 4. 取消订单 ```http POST /api/order/cancel Content-Type: application/json { "orderId": 1 } ``` ### 5. 初始化库存(测试用) ```http POST /api/order/init-stock?courseId=1&stock=100 ``` ## 🔧 **技术实现** ### Redis键设计 - `course:stock:{courseId}` - 课程库存 - `order:lock:{userId}:{courseId}` - 订单锁 - `order:expire:{orderNo}` - 订单过期键 ### 订单状态流转 ``` 待支付(1) → 已支付(2) → 已完成(4) 待支付(1) → 已取消(3) 已支付(2) → 已退款(5) ``` ### 定时任务 - 每30秒检查过期订单 - 自动取消并恢复库存 ## 🧪 **测试方法** ### 1. 准备测试数据 ```bash # 执行SQL脚本 mysql -u root -p redis_demo < scripts/setup_course_data.sql # 初始化库存 curl -X POST "http://localhost:8080/api/order/init-stock?courseId=1&stock=100" ``` ### 2. 使用测试脚本 打开 `scripts/test_order_api.http` 文件,使用IDEA的HTTP Client测试所有接口。 ### 3. 并发测试 ```bash # 使用Apache Bench测试并发创建订单 ab -n 100 -c 10 -T "application/json" -p create_order.json http://localhost:8080/api/order/create ``` ## 📊 **测试数据** ### 课程测试数据 已创建20门课程测试数据,包含: - 不同课程类型(初级、中级、高级) - 不同库存状态(充足、紧张、售罄) - 不同销售状态(热销、正常、停售) ### 执行测试数据 ```sql -- 执行测试数据脚本 source scripts/course_test_data.sql source scripts/setup_course_data.sql ``` ## 🔍 **问题排查** ### 1. 检查Redis库存 ```bash # 查看课程库存 redis-cli GET course:stock:1 # 查看订单过期键 redis-cli KEYS order:expire:* ``` ### 2. 查看日志 ```bash # 查看应用日志 tail -f logs/spring-boot-logger.log # 查看定时任务日志 grep "OrderExpireListener" logs/spring-boot-logger.log ``` ### 3. 验证数据库 ```sql -- 检查订单状态 SELECT * FROM t_order WHERE id = 1; -- 检查库存变化 SELECT stock, sold_count FROM t_course WHERE id = 1; -- 检查支付记录 SELECT * FROM t_payment_record WHERE order_no = 'ORDxxx'; ``` ## 🛠️ **开发建议** ### 1. 调试技巧 - 修改订单过期时间为1分钟方便测试 - 在application.yml中调整定时任务频率 - 开启SQL日志查看详细操作 ### 2. 性能优化 - Redis缓存课程信息 - 数据库索引优化 - 分布式锁粒度控制 ### 3. 扩展方向 - 集成真实支付接口 - 消息队列异步处理 - 订单分库分表 - 分布式事务处理 ## 📁 **相关文件** ### 核心文件 - `OrderServiceImpl.java` - 订单服务实现 - `OrderController.java` - 订单控制器 - `OrderExpireListener.java` - 订单过期监听器 - `RedisKeyUtil.java` - Redis键工具类 ### 配置文件 - `application.yml` - 应用配置 - `application-dev.yml` - 开发环境配置 ### 测试文件 - `scripts/test_order_api.http` - API测试脚本 - `scripts/course_test_data.sql` - 测试数据 - `scripts/setup_course_data.sql` - 初始化脚本 ## 🎯 **下一步计划** 1. **支付集成** - 接入支付宝、微信支付 2. **消息队列** - 使用RabbitMQ处理异步任务 3. **监控告警** - 集成Prometheus + Grafana 4. **性能优化** - Redis集群、数据库优化 5. **分布式部署** - Docker容器化部署 --- **状态:✅ 已完成所有TODO任务** **版本:v2.0 - 完整功能版** **作者:weijian**