1085 1

[作业] SpringBoot3+Vue3 开发高并发秒杀抢购系统 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

74%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
20.8886
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1536 点
帖子
99
精华
0
在线时间
73 小时
注册时间
2021-5-4
最后登录
2024-6-29

楼主
小才子爱读书 发表于 2024-4-10 20:18:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
资料地址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
         * @return
         * @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
         * @return
         * @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,还有另外一个随机参数。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Spring Pring 秒杀抢购 RING boot

沙发
tianwk 发表于 2024-4-11 00:08:10
thanks for sharing

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-1-28 11:41