SpringBoot3+Vue3 开发高并发秒杀抢购系统[完结17章]

kaudmands · · 607 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

资料地址1:https://pan.baidu.com/s/1RgHUpR6KoFjvXmkRKwCNwQ 提取码: hc5a 资料地址2:https://share.weiyun.com/ysK13sR2 密码:74m96t 秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注。本文主要介绍有关于秒杀系统的设计和底层实现原理。 一、通过对需求分析,我们提炼出秒杀活动的三大子流程,即: (运营)创建秒杀活动; (运营/买家)查看秒杀活动; (买家)参与秒杀活动; 有了这个整体把握,我们再针对每一个子流程,分析该场景下需要编排哪些产品功能。 二、实现细节记录 1、用户密码两次MD5加密 第一次MD5加密:防止用户明文密码在网络进行传输 第二次MD5加密:防止数据库被盗,避免通过MD5反推出密码,双重保险 2、分布式session维持会话 后端通过验证用户账号密码都正确情况下,通过UUID生成唯一id作为token,再将token作为key、用户信息对象作为value存储到Redis,同时将token存储到cookie,维持会话状态。当用户访问接口时,只需从cookie取出对应的token信息,根据token键值从Redis获取用户对象。 3、异常统一处理 通过自定义拦截器的方式,对所有所有异常进行拦截,并进行相应的处理,然后把结果信息返回给客户端处理。 采用@ControllerAdvice+@ExceptionHandler(value=Exception.class)方式。 4、页面缓存 + 对象缓存 页面缓存: 通过在手动渲染得到的html页面缓存到Redis,下次访问相同页面时直接从Redis中获取进行返回,减少服务端处理的压力。 五、核心代码 package com.fc.v2.controller; import com.fc.v2.common.base.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; /** * 如果有前台这儿写前台访问方法 * @ClassName: IndexController * @author fuce * @date 2019-10-21 00:15 */ @Api(tags = "首页模块") @Controller public class IndexController extends BaseController{ /** * 前台访问 域名:端口 例如:localhost:80的get请求 * @param map * <a href="/user/return" title="@return">@return</a> * @author fuce * @Date 2019年11月20日 下午10:55:13 */ @ApiOperation(value="前台",notes="前台") @GetMapping("/") public String index(ModelMap map) { //直接访问后台用 return "redirect:/admin/login"; //return "index"; } /** * 前台访问/index的get请求 * @param map * <a href="/user/return" title="@return">@return</a> * @author fuce * @Date 2019年11月20日 下午10:54:56 */ @ApiOperation(value="前台",notes="前台") @GetMapping("/index") public String index2(ModelMap map) { //直接访问后台用 //return "redirect:/admin/login" return "index"; } } 六、秒杀按钮 大部分用户怕错过秒杀时间点,一般会提前进入活动页面。此时看到的秒杀按钮是置灰,不可点击的。只有到了秒杀时间点那一时刻,秒杀按钮才会自动点亮,变成可点击的。但此时很多用户已经迫不及待了,通过不停刷新页面,争取在第一时间看到秒杀按钮的点亮。从前面得知,该活动页面是静态的。那么我们在静态页面中如何控制秒杀按钮,只在秒杀时间点时才点亮呢?没错,使用js文件控制。为了性能考虑,一般会将css、js和图片等静态资源文件提前缓存到CDN上,让用户能够就近访问秒杀页面。看到这里,有些聪明的小伙伴,可能会问:CDN上的js文件是如何更新的?秒杀开始之前,js标志为false,还有另外一个随机参数。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

607 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传