# 黑马点评 **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 Version Java Version License

## 项目介绍 黑马点评是一个基于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) - 初始版本发布 - 核心功能实现 - 性能优化完成