{"repo":"HangboQuan/Miaosha","free":true,"listed":false,"github":"https://github.com/HangboQuan/Miaosha","clone":"git clone https://github.com/HangboQuan/Miaosha.git","description":"该秒杀项目采用前后端分离,实现的功能包括用户登录,查看商品列表,秒杀,秒杀商品详情,订单等业务功能，以及使用众多的优化手段，提高了程序的并发性能","language":"Java","stars":16,"topics":["springboot","springmvc","mybatis","rabbitmq","redis"],"license":null,"category":"databases-storage","readme_excerpt":"Miaosha 秒杀项目及细节优化 项目简介： 该项目是实现一个秒杀系统,采用前后端分离,实现的功能包括用户登录,查看商品列表,秒杀,秒杀商品详情,订单等业务功能,同时利用页面缓存,url缓存,对象缓存,页面静态化,rabbitmq异步下单等一系列措施来提高项目的并发能力,使用Jmeter对系统进行压测时,开启5000个线程循环10次同时访问,QPS由1312优化到2154。 开发工具：IDEA + Maven 项目技术：SpringBoot + SpringMVC + Mybatis + Druid + Redis + Rabbitmq + Bootstrap + Thmeleaf 数据库设计：共5张表：goods（商品表）+ miaosha goods(秒杀商品表) + miaosha user（用户表）+ miaosha order（秒杀订单表）+ order info（订单详情表） 实现细节和优化点： 1.两次MD5加密 第一次加密：从input文本框向form表单提交数据的时候,使用MD5+salt第一次加密;目的是：http在网络上是明文传输的,防止有人在网络上截取到明文密码,导致密码泄露; 第二次加密：用ajax请求服务端时,再次对密码进行加密,并将该密码存入数据库中;目的是：防止数据库被盗,被人利用反推MD5的工具来反推密码,做双重保险; 2.实现分布式Session 由于我们的应用程序不可能总是跑在一个服务器上的,在多台服务器中为了处理用户的Session信息,可以用UUID生成一个随机的token值,将他写入Cookie中同时保存在Redis中,传递给客户端,客户端在随后的访问 中上传这个token,服务器根据token值来获取用户的Session信息; 3.实现JSR303自定义校验器和全局异常处理器 当代码中总是对用户账号,密码进行判空等一系列验证时,为了更方便则实现JSR303将用户账号,密码的验证从业务代码中剥离出来;以及为了统一处理异常信息,实现全局异常处理器,拦截所有的异常信息并对之做相应的处理; 4.页面缓存和对象缓存优化 把用户经常访问,但页面数据很少发生更改的情况下(如：商品列表),可以将html页面存入到Redis中 把用户信息、token等数据进行缓存，利用缓存来减少对数据库的访问，大大加快查询速度 5.页面静态化的优化 静态化页面是指纯html,将页面缓存在用户的浏览器上,不用和服务端进行交互,通过js/ajax请求服务端拿到动态数据来渲染页面 6.接口优化和rabbitmq异步下单 实现思路： （1）系统初始化时,将商品库存加载到Redis中 （2）收到请求后,Redis预减库存（用内存标记做进一步优化）,库存不足则直接返回失败,否则跳入3 （3）请求入队,立即返回排队中(类似于12306买火车票的排队中) （4）请求出队,减少库存,生成订单 （5）客户端轮询,看是否秒杀成功 7.安全方面优化： （1）.秒杀地址隐藏:秒杀开始前是从服务端获取路径,拼起来完整的路径才是真正的秒杀接口地址 （2）.数字公式验证码：点击秒杀前,先让用户计算数学公式验证码,目的：为了防止机器人刷单;为了分散请求,削减并发量 （3）.接口限流防刷：为防止用户恶意刷系统,限制用户每min的访问次数 #### 该项目是学习了慕课网若鱼老师的课程,学完后收获颇丰,对该项目做一总结,后面也会在这一项目的基础上继续优化拓展,期待您的star！（学习地址：https://coding.imooc.com/class/168.html）","default_branch":null,"files":null,"tree":[],"storefront":"/r/HangboQuan","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/HangboQuan/Miaosha/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}