# red-packet **Repository Path**: wuyunbin084math/red-packet ## Basic Information - **Project Name**: red-packet - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2026-01-25 - **Last Updated**: 2026-03-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 红包系统 这是一个基于Spring Boot 4和Redis实现的高并发红包系统,支持普通红包和随机红包两种类型。 ## 功能特性 - **普通红包**:金额平均分配,每个人获得相同金额 - **随机红包**:采用二倍均值算法,每次随机金额范围为[0.01, 剩余金额/剩余个数 * 2),保证公平性的同时保留随机性 - **高并发处理**:使用Redis事务和乐观锁处理高并发抢红包场景 - **数据持久化**:通过Redis存储红包信息、抢红包记录等 - **API接口**:提供完整的REST API供外部调用 ## 架构设计 ### 核心组件 - [RedPacketApplication](src/main/java/com/wuyunbin/redpacket/RedPacketApplication.java):Spring Boot启动类 - [RedPacketController](src/main/java/com/wuyunbin/redpacket/controller/RedPacketController.java):API控制器 - [RedPacketService](src/main/java/com/wuyunbin/redpacket/service/RedPacketService.java):业务逻辑服务层 - [RedPacketStrategy](src/main/java/com/wuyunbin/redpacket/strategy/RedPacketStrategy.java):红包分配策略接口 - [NormalRedPacketStrategy](src/main/java/com/wuyunbin/redpacket/strategy/NormalRedPacketStrategy.java):普通红包分配策略 - [RandomRedPacketStrategy](src/main/java/com/wuyunbin/redpacket/strategy/RandomRedPacketStrategy.java):随机红包分配策略 ### 数据模型 - [RedPacket](src/main/java/com/wuyunbin/redpacket/model/RedPacket.java):红包实体 - [GrabResult](src/main/java/com/wuyunbin/redpacket/model/GrabResult.java):抢红包结果 - [GrabRecord](src/main/java/com/wuyunbin/redpacket/model/GrabRecord.java):抢红包记录 ## API接口说明 ### 发红包 ``` POST /api/redpacket/send ``` 参数: - `creatorId`: 创建者ID - `totalAmount`: 红包总金额 - `totalCount`: 红包总个数 - `type`: 红包类型(NORMAL-普通红包,RANDOM-随机红包,默认为RANDOM) - `blessing`: 祝福语(默认为"恭喜发财") ### 抢红包 ``` POST /api/redpacket/grab ``` 参数: - `redPacketId`: 红包ID - `userId`: 用户ID ### 查询红包详情 ``` GET /api/redpacket/detail/{id} ``` 参数: - `id`: 红包ID ## 技术栈 - Spring Boot 3.x - Redis - Swagger 3 (OpenAPI 3) - Maven ## 系统设计亮点 ### 1. 红包分配策略模式 采用策略模式实现不同类型的红包分配算法,便于扩展新的分配方式: - 普通红包:将总金额平均分配给所有红包,最后一个人可能获得略多的金额以确保总额分配完毕 - 随机红包:使用二倍均值法,确保每个人获得的金额期望相等,同时保持随机性 ### 2. 高并发处理 - 使用Redis的LIST结构存储红包金额列表 - 使用SET结构防止重复领取 - 利用Redis事务和WATCH命令实现乐观锁,保证抢红包的原子性 ### 3. 数据一致性 - 使用Redis作为缓存和临时存储,设置合理的过期时间 - 异步更新红包详情,避免在核心抢红包流程中产生额外的延迟 ## 依赖安装 确保已安装以下环境: - JDK 17+ - Maven 3.8+ - Redis 6+ ## 启动项目 ```bash mvn spring-boot:run ``` 或者打包后运行: ```bash mvn clean package java -jar target/red-packet.jar ``` ## 使用示例 ### 发送普通红包 ```bash curl -X POST "http://localhost:8080/api/redpacket/send?creatorId=user1&totalAmount=100&totalCount=5&type=NORMAL&blessing=新年快乐" ``` ### 发送随机红包 ```bash curl -X POST "http://localhost:8080/api/redpacket/send?creatorId=user1&totalAmount=100&totalCount=5&type=RANDOM" ``` ### 抢红包 ```bash curl -X POST "http://localhost:8080/api/redpacket/grab?redPacketId=xxx&userId=user2" ``` ### 查看红包详情 ```bash curl -X GET "http://localhost:8080/api/redpacket/detail/xxx" ```