场景:如何设计一个秒杀系统

来自hollis八股文

设计一个秒杀系统需要考虑以下问题

秒杀系统存在的问题

1. 高并发流量

2. 热点数据

3. 库存正常扣减

4. 重复下单

5. 对普通交易的影响

6. 业务手段

7. 黄牛

高并发流量

将请求链路变短,把一些流量挡在外面

1. 使用CDN服务存储静态资源,降低服务器开销

2. 使用nginx做黑白名单,过滤掉行为不正常的用户

3. 使用本地缓存,redis 替代数据库进行商品库存扣减

热点数据

一般来说秒杀系统会预测到哪个商品是热点数据

1. 将热点数据放入redis中进行预热

2. 解决热key问题

        加入本地缓存,减少缓存请求链路

        做redis集群架构,备份热key

        将热key拆分,比如 淄博001 淄博002,再根据id对key进行映射

库存的正常扣减

为了高并发,将库存放入redis做扣减

1. 利用redis做缓存,抗住并发流量

2. redis发送mq信息给mq client,进行数据库库存扣除

        mq发送会出现,消息丢失问题(少买)

        下订单的时候,进行账单表的统计

        定时去进行对账

重复下单

1. 解决接口幂等性的问题

        一锁二判三更新

2. 

  • 提交表单前,获取token令牌,并将其存储在redis中
  • 提交表单时,一并将token提交并检验和删除,这一步属于原子操作,我们使用lua脚本

3. 订单重复性判断

黄牛

1. 令牌桶或者漏桶 

2. 识别黄牛id、ip 加入nginx黑名单

业务相关

预售就开始进行筛选

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务(基础篇-008-Elasticsearch分布式搜索【上】)

目录 初识elasticsearch(1) 了解ES(1.1) 倒排索引(1.2) es的一些概念(1.3) 安装es、kibana(1.4) ik分词器(1.5) ik分词器的拓展…

Kubernetes学习笔记12

k8s核心概念:控制器: 我们删除Pod是可以直接删除的,如果生产环境中的误操作,Pod同样也会被轻易地被删除掉。 所以,在K8s中引入另外一个概念:Controller(控制器)的概念,…

html基础——CSS

在HTML中,CSS的作用是用于控制网页的样式,包括字体、颜色、背景、布局等方面的设计。通过一个样例来说明CSS的作用: 如下是一个名为global.css的CSS文件: .C1{font-size: 10px;color: blue;border:1px solid red;height: 200px;…

顺序表C语言、C#代码实现

以下是使用C语言、C#、Java、JavaScript、Python和Go实现顺序表&#xff08;即数组&#xff09;的基本操作的示例代码。 C语言实现&#xff1a; #include <stdio.h> #include <stdlib.h>#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int length; } S…

Springboot+Vue项目-基于Java+MySQL的旅游网站系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

C# 接口和抽象类有效的搭配使用建议

在面向对象设计中&#xff0c;接口&#xff08;Interfaces&#xff09;和抽象类&#xff08;Abstract Classes&#xff09;都是用来实现抽象概念的机制&#xff0c;但它们的使用和目的有所不同。选择先定义接口还是抽象类&#xff0c;或者是如何组合使用它们&#xff0c;主要取…

免费升级至HTTPS协议教程

一、前言 HTTPS协议以其安全性和数据加密特性&#xff0c;逐渐取代HTTP成为互联网通信的主流协议。本文将为您简洁明了地介绍如何免费升级至HTTPS协议。 二、获取免费SSL证书 选择证书提供商&#xff1a;如JoySSL等提供免费SSL证书的服务。 免费申请地址https://www.joyssl.…

一键开启Scrum回顾会议的精彩时刻

其实回顾会议作为一个检视、反馈、改进环节&#xff0c;不仅在传统的瀑布管理模式中&#xff0c;还是在Scrum一类的敏捷管理流程中&#xff0c;都是非常重要的活动。一些团队认为它无法产生直接的价值&#xff0c;所以有意忽略了这个会议&#xff1b;一些团队在越来越多的回顾中…

如何强制复制网站上的文字

文章目录 拖拽复制利用开发者工具利用js脚本禁用js执行开发者工具不能打开 平时浏览网页和查找资料时&#xff0c;总会需要复制一些文字内容&#xff0c;用来引用、收藏、摘抄啊什么的&#xff0c;但是偶尔会遇到一些网站会禁止复制文字&#xff0c;一般都是让你开会员或者注册…

java快速构建飞书API消息推送、消息加急等功能

文章目录 飞书机器人自定义机器人自定义应用机器人 自定义应用发送消息普通文本 text富文本 post图片 image文件 file语音 audio视频 media消息卡片 interactive分享群名片 share_chat分享个人名片 share_user 批量发送消息消息加急发送应用内加急发送短信加急 发送电话加急spr…

2024年第十四届MathorCup数学应用挑战赛A题思路分享(妈妈杯)

A题 移动通信网络中PCI规划问题 物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少物理层的小区间互相干扰(ICI),增加物理下行控制信道(PDCCH)的吞吐量有着重要的作用,尤其…

JavaScript入门--变量

JavaScript入门--变量 一、JS变量二、变量命名三、常量四、局部变量 一、JS变量 定义变量a, b, c&#xff0c;并输出到控制台。 var a 1; var b 13.14; var c hello Js;console.log(a, b, c) //console.log()语句用于输出结果到控制台&#xff0c;类似python的print语句…

市面上常用财务软件有哪些?

云会计财务软件&#xff0c;免安装免维护&#xff0c;节省成本&#xff0c;受到很多小微企业欢迎。那么&#xff0c;常用财务软件有哪些&#xff1f; 1、易舟云财务软件 小微企业常用财务软件&#xff0c;便宜好用&#xff0c;极致的用户体验&#xff01;一键录入凭证&#xff…

redis的过期策略和内存淘汰机制(redis篇)

分享并学习一下redis的过期策略和内存淘汰机制 在平时的工作或者学习中&#xff0c;即便自己没有实打实的用过redis。但是能有对这方面的思考&#xff0c;再结合一些实际场景和理论&#xff0c;那么我相信自己或者你都会越来越厉害的。 首先&#xff0c;我们需要认清为啥redis要…

【Java】Set集合的基本使用

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 ①&#xff1a;add(Object o)&#xff1a;向Set集合中添加元素&#xff0c;不允许添加重复数据。 ②&#xff1a;size()&#xff1a;返回Set集合中的元素个数…

Android8.1 MTK平台 修改蓝牙默认名称

的默认蓝牙名称为 Android Bluedroid 通过搜索你会找到如下文件 device/generic/common/bluetooth/bdroid_buildcfg.h #ifndef _BDROID_BUILDCFG_H #define _BDROID_BUILDCFG_H#define BTM_DEF_LOCAL_NAME "Android Bluedroid"#endif 如果单一情况你修改此处即可…

Ubuntu无网络标识的解决方法

1.出现的情况的特点 2.解决办法 2.1 进入root并输入密码 sudo su 2.2 更新NetworkManager的配置 得先有gedit或者vim&#xff0c;两个随意一个&#xff0c;这里用的gedit&#xff0c;没有就先弄gedit&#xff0c;有的话直接下一步 apt-get install gedit 或者vim apt-get ins…

Docker部署Logstash同步Mysql数据到ES

1、准备配置文件文件夹 2、部署logstash & elasticsearch docker pull docker.elastic.co/logstash/logstash:7.15.0 ## 替换{你的ES地址}为ES地址 docker run -d --name logstash -p 5044:5044 -p 9600:9600 -v D:\logstash\data\:/usr/share/logstash/data -v D:\logst…

vue2中echarts横向柱状图一个柱子多个颜色渐变(渲染在页面上)

一、渲染到页面的准备 1、设置渲染节点&#xff08;这里使用了ref&#xff09; <div class"index" ref"lineStyle"></div> 2、寻找到节点并初始化 let ref this.$refs.lineStyle; this.myChart1 echarts.init(ref); 3、尝试渲染 this.myC…

Flink学习(四)-数据管道 ETL

一、状态转换 map() 只适用于一对一的转换&#xff0c;即对每个进入算子的流元素&#xff0c;map() 将仅输出一个转换后的元素。 flatmap() 可以输出任意数量的元素&#xff0c;也可以一个都不发。 二、Keyed Streams keyBy() 相当于 sql 中的 group by&#xff0c;通过…