# 鲜花售卖系统 **Repository Path**: M1ch/dianping-backend-plus ## Basic Information - **Project Name**: 鲜花售卖系统 - **Description**: 这里面会加设计模式来封装4个缓存策略,然后用布隆过滤器解决缓存穿透,此外还有rabbitmq死信对列和rabbitmq实现异步等 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-12 - **Last Updated**: 2026-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 鲜花售卖系统 ## 项目介绍 大众点评 Plus 是一个基于 Spring Boot 开发的鲜花售卖后端服务系统。该项目采用了多种设计模式来封装缓存策略,并引入布隆过滤器解决缓存穿透问题,同时使用 RabbitMQ 实现异步处理,提升系统在高并发场景下的性能表现。 ## 技术栈 | 分类 | 技术 | |------|------| | 框架 | Spring Boot 3.2.5 | | 数据库 | MySQL 8.0 | | 缓存 | Redis | | 分布式锁 | Redisson | | 消息队列 | RabbitMQ | | ORM | MyBatis Plus | | 工具 | Hutool, Guava, Caffeine | | 认证 | JWT (JJWT) | | 日志 | Logback | ## 项目架构 ``` com.zyyyue.dazhongdianpingplus/ ├── config/ # 配置类 │ ├── CacheConfig.java │ ├── LoginConfig.java │ ├── RedisBloomFilter.java │ └── RedissonConfig.java ├── constant/ # 常量定义 ├── controller/ # 控制器 │ ├── BlogController.java │ ├── FollowController.java │ ├── ShopController.java │ ├── ShopTypeController.java │ ├── UserController.java │ ├── VoucherController.java │ └── VoucherOrderController.java ├── domain/ # 实体类 │ ├── dto/ # 数据传输对象 │ ├── entity/ # 实体 │ └── vo/ # 视图对象 ├── interceptor/ # 拦截器 ├── limit/ # 限流组件 ├── mapper/ # 数据访问层 ├── service/ # 业务逻辑层 │ └── Impl/ # 实现类 ├── strategy/ # 策略模式 │ └── context/ # 策略上下文 ├── util/ # 工具类 └── enums/ # 枚举类 ``` ## 核心功能模块 ### 1. 缓存策略封装 项目采用策略模式封装了四种缓存查询策略,通过 `CacheStrategyContext` 统一调度: | 策略 | 说明 | |------|------| | QueryWithPassThrough | Cache Aside 模式,直接查询数据库并缓存 | | QueryWithBloomFilter | 布隆过滤器 + 缓存空值,解决缓存穿透 | | QueryWithMutex | 互斥锁,防止缓存击穿 | | QueryWithLogicalExpire | 逻辑过期,解决缓存雪崩 | ### 2. 布隆过滤器 使用 Redis 实现分布式布隆过滤器,有效解决缓存穿透问题: ```java // 配置示例 bloom: filter: filter-name: shopBloomFilter fpp: 0.01 # 误判率 expected-insertions: 1000000 # 预计插入数量 ``` ### 3. 分布式锁 使用 Redisson 实现可重入锁,结合 Lua 脚本保证原子性,解决超卖问题: - 基于 Redis 的分布式锁 - 支持公平锁和非公平锁 - 支持看门狗机制自动续期 - Lua 脚本保证操作的原子性 ### 4. RabbitMQ 异步处理 使用 RabbitMQ 实现优惠券订单的异步处理: - 优惠券秒杀请求放入消息队列 - 后台异步处理订单 - 死信队列处理失败消息 - 缓解高并发压力 ### 5. JWT 认证 使用 JWT 存储用户 Token,拦截器自动刷新有效期: - Token 过期自动刷新 - 用户信息存储在 ThreadLocal - 登录拦截器统一处理认证 ### 6. 限流组件 使用 Guava RateLimiter 实现接口限流: ```java @Limit(key = "seckill", permitsPerSecond = 10, timeout = 100) public Result seckillVoucher(Long voucherId) {} ``` ## 实体模型 | 实体 | 说明 | |------|------| | User | 用户 | | UserInfo | 用户详细信息 | | Shop | 商户 | | ShopType | 商户类型 | | Blog | 探店笔记 | | BlogComments | 笔记评论 | | Voucher | 优惠券 | | VoucherOrder | 优惠券订单 | | SeckillVoucher | 秒杀优惠券 | | Follow | 关注关系 | | Sign | 签到记录 | ## API 接口 ### 用户模块 - `POST /user/code` - 获取验证码 - `POST /user/login` - 登录 - `POST /user/sign` - 签到 - `GET /user/sign/count` - 签到统计 ### 商户模块 - `GET /shop/{id}` - 查询商户 - `POST /shop` - 新增商户 - `PUT /shop` - 修改商户 - `GET /shop/of/type` - 按类型查询商户 ### 优惠券模块 - `POST /voucher` - 新增优惠券 - `POST /voucher/seckill` - 新增秒杀优惠券 - `POST /voucher-order/seckill/{id}` - 秒杀抢购 ### 探店笔记模块 - `POST /blog` - 发布笔记 - `PUT /blog/like/{id}` - 点赞笔记 - `GET /blog/of/follow` - 关注者的笔记 ### 社交模块 - `PUT /follow/{id}/{isFollow}` - 关注/取消关注 - `GET /follow/or/not/{id}` - 查询是否关注 ## 项目亮点 1. **多级缓存策略** - 使用 Redis 对活动和工单进行缓存,防止高并发下频繁访问数据库 2. **布隆过滤器** - 解决缓存穿透问题 3. **Redisson 分布式锁** - 结合 Lua 脚本保证原子性,解决超卖问题 4. **逻辑过期** - 优化 Redis 的缓存击穿问题 5. **RabbitMQ 异步处理** - 优惠券请求放入队列,后台异步处理 6. **JWT 自动刷新** - 拦截器自动刷新 Token 有效期 7. **限流保护** - 使用 Guava RateLimiter 防止接口被刷 ## 配置说明 主要配置项在 `application.yaml` 中: ```yaml spring: data: redis: host: localhost port: 6379 rabbitmq: host: localhost port: 5672 datasource: url: jdbc:mysql://localhost:3306/dianping jwt: secret: your-secret-key ttl: 3600000 bloom: filter: filter-name: shopBloomFilter fpp: 0.01 expected-insertions: 1000000 ``` ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.8+ - MySQL 8.0+ - Redis 5.0+ - RabbitMQ 3.8+ ### 编译运行 ```bash # 打包 mvn clean package # 运行 java -jar target/dazhongdianping-Plus-1.0-SNAPSHOT.jar ``` ## 许可证 本项目仅供学习参考使用。