# CityHub **Repository Path**: laixideng/CityHub ## Basic Information - **Project Name**: CityHub - **Description**: CityHub 是一个基于 SpringBoot 构建的高并发、分布式本地生活服务平台后端。项目深度集成 Redis 与 RabbitMQ,为核心业务提供强力支撑:利用 Redis Lua 脚本与 RabbitMQ 异步队列构建了可靠的秒杀系统,确保高并发下的数据一致性;通过 Redis GEO 实现附近店铺搜索,通过 BitMap 实现高效用户签到与统计,并通过 ZSet 维护热门榜单;此外,采 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-08-26 - **Last Updated**: 2026-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 城市生活服务平台(CityHub) 这是一个基于Spring Boot的微服务项目,旨在为用户提供城市生活服务相关的功能,包括商铺信息查询、优惠券管理、用户互动、博客分享等。项目使用了Redis、MyBatis Plus、Redisson等技术栈,支持高并发场景下的稳定服务。 ## 🚀 功能亮点 - **商铺管理**:支持商铺信息的增删改查,包括商铺分类、地理位置、营业时间等。 - **优惠券系统**:提供普通优惠券和秒杀优惠券的发放、使用和订单管理。 - **用户系统**:包含用户注册、登录、签到、关注等功能,支持短信验证码登录。 - **博客互动**:用户可以发布博客、评论、点赞,支持关注好友的动态流。 - **高并发优化**:使用Redis缓存、分布式锁、逻辑过期时间等策略优化性能。 - **地理位置搜索**:支持基于地理位置的商铺查询。 ## 📦 技术栈 - **后端框架**:Spring Boot、MyBatis Plus - **数据库**:MySQL - **缓存**:Redis、Redisson - **工具类**:Lombok、ThreadLocal、RedisIdWorker(雪花算法改进) - **安全**:短信验证码、密码加密(PasswordEncoder) - **部署与测试**:Maven、JUnit ## 🛠️ 安装与部署 1. **克隆项目** ```bash git clone https://gitee.com/laixideng/CityHub.git cd CityHub ``` 2. **配置数据库** - 导入 `hm-dianping/src/main/resources/db/hmdp.sql` 到 MySQL 数据库。 - 修改 `application.yaml` 中的数据库连接信息(用户名、密码、URL)。 3. **启动项目** ```bash mvn spring-boot:run ``` 4. **访问服务** - 默认启动端口为 `8080`,可通过 `http://localhost:8080` 访问 API 接口。 ## 📚 API 文档 ### 用户模块 `/user` - `POST /user/login` - 用户登录(短信验证码) - `GET /user/me` - 获取当前用户信息 - `POST /user/sign` - 用户签到 - `GET /user/sign/count` - 查询签到天数 ### 商铺模块 `/shop` - `GET /shop/{id}` - 查询商铺详情 - `POST /shop` - 新增商铺 - `PUT /shop` - 更新商铺信息 - `GET /shop/of/type` - 按类型查询商铺(支持地理位置排序) ### 优惠券模块 `/voucher` - `POST /voucher` - 添加普通优惠券 - `POST /voucher/seckill` - 添加秒杀优惠券 - `GET /voucher/list/{shopId}` - 查询商铺优惠券列表 ### 博客模块 `/blog` - `POST /blog` - 发布博客 - `GET /blog/{id}` - 查看博客详情 - `PUT /blog/like/{id}` - 点赞博客 - `GET /blog/hot` - 查询热门博客 - `GET /blog/of/follow` - 查询关注用户的博客流 ### 关注模块 `/follow` - `PUT /follow/{id}/{isFollow}` - 关注或取消关注用户 - `GET /follow/or/not/{id}` - 查询是否已关注某用户 - `GET /follow/common/{id}` - 查询与某用户的共同关注 ## 🔐 安全机制 - 登录拦截器(`LoginInterceptor`):未登录用户无法访问受保护资源。 - 刷新 Token 拦截器(`RefreshTokenInterceptor`):自动刷新用户登录状态。 - 密码加密:使用 `PasswordEncoder` 对用户密码进行加密存储。 ## 🧪 测试模块 - 使用 `JUnit` 编写单元测试,测试 Redis ID 生成器、缓存重建、秒杀功能等。 - 示例测试类:`HmDianPingApplicationTests.java` ## 🧱 缓存与并发控制 - **缓存穿透**:使用空值缓存(`CACHE_NULL_TTL`)防止缓存穿透。 - **缓存击穿**:使用互斥锁(`SimpleRedisLock`)或逻辑过期时间策略。 - **缓存雪崩**:设置不同缓存过期时间,避免同时失效。 - **分布式锁**:基于 Redis 的 `SimpleRedisLock` 实现分布式锁机制。 - **秒杀优化**:使用 Lua 脚本保证原子性,异步处理订单生成。 ## 📁 项目结构说明 - `controller`:API 接口层,处理 HTTP 请求。 - `service`:业务逻辑层,调用 Mapper 操作数据库。 - `mapper`:数据访问层,使用 MyBatis Plus 提供 CRUD 操作。 - `entity`:实体类,对应数据库表结构。 - `dto`:数据传输对象,用于封装接口返回数据。 - `utils`:工具类,包括缓存客户端、Redis 工具、ID 生成器等。 - `config`:配置类,包括 Spring MVC、MyBatis、Redisson 等配置。 - `aspect`:AOP 切面类,处理全局异常(`WebExceptionAdvice`)。 ## 📄 许可证 本项目采用 [MIT License](https://opensource.org/licenses/MIT),欢迎自由使用和贡献代码。