# 黑马点评
**Repository Path**: jwaitq/hmdp
## Basic Information
- **Project Name**: 黑马点评
- **Description**: 黑马点评是一个基于Java语言开发的springboot项目,类似于大众点评,主要用于商户评价和查询。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-10-26
- **Last Updated**: 2025-11-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 黑马点评 (Heima Dianping)
## 项目介绍
黑马点评是一个基于Spring Boot开发的现代化商户点评平台,灵感来源于大众点评。该项目实现了完整的商户管理、用户评价、探店博客分享、优惠券秒杀等核心功能,采用主流技术栈构建,具备高性能、高可用和易扩展的特点。
该系统通过多种缓存策略、分布式锁机制以及异步消息处理等技术手段,有效解决了高并发场景下的各种挑战,如缓存穿透、缓存击穿、缓存雪崩、超卖等问题,是一个优秀的分布式系统实践案例。
## 技术架构
### 后端技术栈
- **核心框架**: Spring Boot 3.2.0
- **编程语言**: Java 21
- **持久层框架**: MyBatis-Plus 3.5.9
- **数据库**: MySQL 8.0.30
- **缓存系统**: Redis 6.x (Lettuce客户端 + Redisson分布式锁)
- **消息队列**: RabbitMQ
- **连接池**: Lettuce + Commons Pool2
- **工具库**: Hutool 5.8.37、Lombok
- **API文档**: SpringDoc OpenAPI (原Swagger)
- **单元测试**: JUnit 5 + Mockito
### 系统特性
- 基于JWT的用户认证与授权机制
- Redis缓存优化,包含热点数据缓存、空值缓存等策略
- Redisson实现分布式锁,保障数据一致性
- RabbitMQ异步处理订单等耗时操作
- 自定义Redis缓存客户端,支持逻辑过期和缓存重建
- 基于Lua脚本的原子性操作
- 完善的全局异常处理和参数校验机制
## 核心功能模块
### 1. 用户管理系统
- 手机号+验证码登录注册
- 基于Redis的分布式Session管理
- 用户个人信息维护
- 用户间关注/取关及共同关注分析
### 2. 商户管理系统
- 商户信息增删改查
- 商户分类管理
- 基于地理位置的商户查询
- Redis缓存优化商户信息查询性能
### 3. 探店博客系统
- 用户发布探店笔记
- 图片上传与管理
- 博客点赞与取消点赞
- 基于点赞数的热门博客推荐
- 博客评论与回复功能
### 4. 优惠券秒杀系统
- 优惠券发放与管理
- 秒杀优惠券功能
- Redis预减库存防止超卖
- Redisson分布式锁确保下单安全性
- RabbitMQ异步处理订单
### 5. 文件上传系统
- 图片文件上传功能
- 文件类型和大小校验
- 统一文件存储路径管理
## 项目结构
```
hm-dianping/
├── src/main/java/com/hmdp/
│ ├── config/ # 配置类目录
│ ├── controller/ # 控制器层
│ ├── dto/ # 数据传输对象
│ ├── entity/ # 实体类
│ ├── mapper/ # 数据访问层
│ ├── service/ # 业务逻辑层
│ │ └── impl/ # 业务逻辑实现
│ └── utils/ # 工具类
├── src/main/resources/
│ ├── db/ # 数据库脚本
│ ├── mapper/ # MyBatis Mapper XML文件
│ ├── application.yaml # 应用配置文件
│ └── unlock.lua # Lua脚本
└── pom.xml # Maven依赖配置
```
## 数据库设计
### 主要数据表
- **tb_user**: 用户表
- **tb_user_info**: 用户信息详情表
- **tb_shop**: 商户表
- **tb_shop_type**: 商户类型表
- **tb_blog**: 探店博客表
- **tb_blog_comments**: 博客评论表
- **tb_follow**: 用户关注关系表
- **tb_voucher**: 优惠券表
- **tb_seckill_voucher**: 秒杀优惠券表
- **tb_voucher_order**: 优惠券订单表
## 快速开始
### 环境要求
- Java 21+
- MySQL 8.0+
- Redis 6.0+
- RabbitMQ 3.8+
### 安装步骤
1. **克隆项目**
```bash
git clone https://gitee.com/your-repo/hm-dianping.git
cd hm-dianping
```
2. **数据库初始化**
```bash
# 创建数据库
mysql -u root -p -e "CREATE DATABASE hmdp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 导入数据
mysql -u root -p hmdp < src/main/resources/db/hmdp.sql
```
3. **环境配置**
编辑 `src/main/resources/application.yaml` 文件,配置你的环境信息:
```yaml
spring:
datasource:
url: jdbc:mysql://192.168.1.110:3306/hmdp?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
username: root
password: root
data:
redis:
host: 192.168.1.110
port: 6379
database: 10
password: root
rabbitmq:
host: 192.168.1.110
port: 17777
username: root
password: root
```
4. **编译运行**
```bash
# Maven编译打包
mvn clean package
# 运行应用
java -jar target/hm-dianping-0.0.1-SNAPSHOT.jar
```
应用启动后访问: http://localhost:8081
## API接口文档
### 用户相关接口
- `POST /user/code` - 发送手机验证码
- `POST /user/login` - 用户登录
- `GET /user/me` - 获取当前用户信息
- `POST /user/logout` - 用户登出
### 商户相关接口
- `GET /shop/{id}` - 根据ID查询商铺
- `GET /shop/of/type` - 根据类型分页查询商铺
- `GET /shop/of/name` - 根据名称关键字查询商铺
### 博客相关接口
- `POST /blog` - 发布博客
- `GET /blog/hot` - 查询热门博客
- `PUT /blog/like/{id}` - 点赞博客
- `GET /blog/of/me` - 查询我的博客
### 优惠券相关接口
- `POST /voucher/seckill/{id}` - 秒杀优惠券
- `GET /voucher/list/{shopId}` - 查询商铺优惠券
## 核心技术实现
### 1. 缓存优化策略
- **热点数据缓存**: 将频繁访问的商户信息、商户类型等数据缓存到Redis
- **空值缓存**: 为解决缓存穿透问题,将数据库中不存在的数据也缓存起来,但设置较短的过期时间
- **逻辑过期**: 对热点数据设置逻辑过期时间,通过后台线程异步重建缓存
### 2. 分布式锁实现
- **Redisson可重入锁**: 在优惠券秒杀等场景中使用Redisson实现分布式锁,保障数据一致性
- **自研Redis分布式锁**: 基于Redis的SETNX命令实现简易分布式锁
### 3. 异步处理
- **RabbitMQ消息队列**: 将创建订单等耗时操作通过消息队列异步处理,提高系统响应速度
### 4. 限流与防刷
- **Redis计数器**: 实现短信验证码发送频率限制
- **接口限流**: 对高频接口进行访问频次限制
## 性能优化实践
1. **Redis缓存优化**
- 多级缓存策略应对不同场景
- 缓存预热与缓存更新机制
- 合理设置过期时间避免缓存雪崩
2. **数据库优化**
- 索引优化提升查询效率
- 读写分离减轻数据库压力
- 分库分表支持海量数据
3. **分布式锁优化**
- Redisson红锁算法保障高可用
- 锁续期机制避免死锁问题
4. **异步处理优化**
- 消息队列削峰填谷
- 异步解耦提高系统吞吐量
## 安全性保障
- 手机号验证码登录,防止恶意注册
- Redis分布式会话管理
- 接口权限控制与身份验证
- 数据验证和SQL注入防护
- 敏感信息加密存储
## 监控与运维
- 集成Spring Boot Actuator监控端点
- 完善的日志记录体系
- 健康检查与性能指标监控
- 支持优雅停机和故障恢复
## 测试
运行单元测试:
```bash
mvn test
```
## 参与贡献
我们欢迎任何形式的贡献,包括但不限于:
1. Fork 本仓库
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启一个Pull Request
## 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情
## 联系方式
- 项目地址: https://gitee.com/your-repo/hm-dianping
- 技术支持: your-email@example.com
## 更新日志
### v1.0.0 (2024-01)
- 初始版本发布
- 核心功能实现
- 性能优化完成