### 前言
大家好,之前在公司自己设计并开发了一套完整的秒杀系统,希望和大家分享一下,希望大家能从中收益,如果有意见和好的想法请加我!
QQ:3341386488
邮箱:QiuRunZe_key@163.com
我会不断完善,希望大家有好的想法拉一个分支提高,一起合作!
觉得不错对您有帮助,麻烦右上角点下star以示鼓励!长期维护不易 多次想放弃 坚持是一种信仰 专注是一种态度!
## 秒杀设计整体流程
![整体流程](http://i2.bvimg.com/601558/886c867d6488dfc2.png)
#### 需注意几点:
1.如何解决卖超问题
① sql加上判断如果防止数据变为负数
② 数据库加唯一索引防止用户重复购买
③ redis预减库存减少数据库访问 内存标记减少redis访问 请求先入队列缓冲,异步下单,增强用户体验
2.如何解决分布式session
① 生成一个随机的uuid一类的写回到cookie中
② redis 内存写入
③ 下一个页面拿到uuid 内存取对象
3.如何优雅解决接口防刷限流
>
如果有缓存的话 这个功能实现起来就和简单,在一个用户访问接口的时候我们把访问次数写到缓存中,在加上一个有效期。
通过拦截器. 做一个注解 @AccessLimit 然后封装这个注解,可以有效的设置每次访问多少次,有效时间是否需要登录!
4.通用缓存key的封装采用什么设计模式?
模板模式的优点
①具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。
②代码复用的基本技术,在数据库设计中尤为重要。
③存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合“开闭原则”。
缺点: 每个不同的实现都需要定义一个子类,会导致类的个数增加,系统更加庞大
5.LVS , tomcat(apr) , keepalive 高可用 ???? 未来更新 ??
6.限流算法等未来更新