基于spring boot高性能高并发秒杀系统方案及优化 第一部分
- 2019 年 12 月 2 日
- 筆記
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43126117/article/details/94396352
项目源码:https://github.com/yingyingqiqi/flash
这是电商系统的一个模块,主要涉及秒杀这个应用场景,但是,里面的知识却超越了秒杀,涉及到高并发、高性能的系统构建(缓存+异步+限流)
闲扯:这篇文章是对慕课网“Java秒杀系统方案优化 高性能高并发实战”课程的学习总结,以及自己的一些看法和改良,很久之前看的课程了,现在二刷,并加上一些示意图,方便自己或者他人理解秒杀涉及到的技术。
文章整体思路介绍:
1.完成一些基础的工具类开发,分布式会话、原生redis的API集成、参数的效验及解析、秒杀的初步构想。
2.秒杀的优化,各种加缓存、异步化、防刷限流。
3.这篇文章不讲代码的实现,主要讲思路,给出示意图,方便理解。
技术栈:spring+ spring boot+ mybatis+ +redis+ rabbitmq+ 前端技术知识
项目初步搭建
基于Maven的Spring-Boot工程框架进行项目框架搭建, 并集成Thymeleaf服务端页面模板,集成redis、集成mybatis,主要导jar包,复制粘贴配置文件,再设计实体类,设计数据库,这些就看看代码吧。
重点:redis的API封装,(设计模式适配器模式)

redis+redis客户端封装
适配器模式:在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。
这个keyprefix—-类适配器模式,适配器继承自己实现的类(一般多冲继承),图上面有很详细的备注,自己根据图和代码摸索一番。
重点:通用异常和通用响应
基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)写的很清楚,这就不再次介绍了。
实现用户登录以及分布式session功能
为了用户登陆数据传输和存储的安全性,实现密码两次MD5入库,利用Redis实现分布式Session。为后面的秒杀功能提供必备的用户信息。
重点:集成Jsr303参数效验
1.自定义效验注解IsModile。(可以参考NotNull自带的注解)
2.实现ConstraintValidator接口,先改initialze(IsModile a)属性,及初始化验证器。再实现实际验证逻辑

参数效验
重点:分布式session的设计
1.用户请求登陆页面,验证用户名密码,并通过数据库检查是否正确
2.获取用户对象信息(user),及随机分配一串字符(token),存入redis数据库中,键token值user
3.用户请求其他页面,携带token,既可以访问系统,其他页面程序通过token获取redis的用户信息(user)
(也就是我们没有使用servlet自带的session,主要就是session不知道怎么跨服务器传)

分布式会话
重点:自定义参数注入(参数解析器)
1.使用场景:用户携带token,程序需要user对象,难道每个程序都写上根据token获取user代码吗?参数解析器,就可以自动注入user对象到controller方法中。
2.实现HandlerMethodArgumentResolver接口,将实现类注入springMVC容器中。

参数解析器(自定义参数注入)
秒杀功能开发及管理后台
实现秒杀的交互设计和秒杀功能的前端和后台,随着后期优化,秒杀前后端功能也要进行相应改造(我们会通过演进的方式一步一步的进行优化)。这些就看看代码,不是很难,纯粹的CRUD操作。两个重点的接口,商品列表、商品详情、商品秒杀接口。
未优化前
