Skip to content

黑马点评项目优化,新增消息队列RabbitMQ,令牌桶限流实现优惠券秒杀,用户登录限流(redis实现滑动窗口)等功能

Notifications You must be signed in to change notification settings

haopengmai/dianping

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dianping

黑马点评 简化版大众点评 项目简介:本项目是一个类似于大众点评等打卡类APP的点评类项目。实现了短信登陆、探店点评、优惠券秒杀、每日签到、好友关注、粉丝关注博主后,主动推送博主的相关博客等多个模块。 用户可以浏览首页的推荐内容,搜索附近的商家,查看商家的详情和评价以及发表探店博客,抢购商家发布的限时秒杀商品。

克隆完整项目

git clone https://github.com/haopengmai/dianping.git

前端环境部署

nginx-1.18.0 启动nginx.exe

后端环境部署

在application.yaml文件中,Mysql、Redis、RabbitMQ相关的配置需要自行更改

Redis服务器版本不能低于6.2,获取附近的商家信息GEOSEARCH 命令是在 Redis 6.2 版本中引入

RabbitMQ版本为3.9

技术 说明
SpringBoot 容器+MVC框架
Redis 分布式缓存
RabbitMQ 消息中间件
MySQL 关系型数据库
Lombok 简化对象封装工具
SMTP SMTP协议邮箱文件传输

后端部分功能做了优化

优化点1:登录模块,暂时使用个人用户邮箱发送短信验证码->(后续使用阿里云短信服务实现短信登录功能)

用了QQ邮箱的SMTP协议,暂时用个人账号发送短信验证码

优化点2:秒杀,高并发的情境下采用消息队列RabbitMQ来优化秒杀下单,减轻数据库的压力。

基于lua保证判断库存是否充足、判断用户是否下单、扣库存、下单并保存用户事件的原子性,同时采用RabbitMQ异步处理高并发情况下的请求。

优化点3:秒杀,高并发的情境下使用令牌桶算法进行一定程度上的限流

秒杀是个高并发的过程,短时间内后端访问量巨大,可能会压垮系统,而且只有少许人能秒杀成功,因此首先要做的应该是限流。

优化点4:使用Redis中的ZSET数据结构+时间窗口思想,进行用户限流

redis-zset实现用户二级限流,一级限流(5分钟内3次短信仍然登录失败->设计为禁止登录,往redis中写入一个10分钟过期的string并升级为二级限流)、二级限流(5分钟内3次短信仍然登录失败设计为禁止登录,往redis中写入一个30分钟过期的string并重新设置为二级限流)

首先检查一级和二级限制条件,然后分别计算了过去1分钟和过去5分钟内发送验证码的次数。如果过去1分钟内已经发送了一次验证码,或者过去5分钟内发送的验证码次数达到了5次或者是8、11、14...次,那么就会进入相应的限制条件,并向用户发送错误消息。如果没有触发任何限制条件,那么就会生成验证码并发送,然后更新发送时间和次数。

About

黑马点评项目优化,新增消息队列RabbitMQ,令牌桶限流实现优惠券秒杀,用户登录限流(redis实现滑动窗口)等功能

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages