redis之如何支持秒杀场景

news2024/9/25 21:30:11

写在前面

本文一起看下Redis在秒杀场景中的应用。

在这里插入图片描述

1:秒杀都有哪些阶段

redis并非在秒杀的所有阶段都需要使用到,为了更好的了解redis在秒杀场景中的应用,我们先来看下秒杀的不同阶段,基本可以分为秒杀前,秒杀进行时,秒杀后。

1.1:秒杀前

秒杀前用户的动作就是在自己想要购买的页面等待倒计时,并且不断的刷新页面,等待倒计时变为购买,此时的请求量会比较大,所以我们需要做的就是尽量将一些静态资源使用CDN缓存,比如商品的图片等,或者是客户端本地做缓存(这种可能是最优的,但是对客户端要求就增加了)。因此,这一阶段完全使用不到Redis。

1.2:秒杀进行时

当倒计时变为可点击的购买按钮时,用户点击购买按钮,后台的逻辑如下:

1:判断库存是否充足,如果充足进入2,否则进入3
2:下单
3:提示库存不足

其中1并发量是比较大的,因为大家同时点,对速度的要求很高,而判断库存是否充足其实就是判断库存量是否大于0,这里redis的高并发的读写特点就可以派上用场了,具体做法是使用一个哈希结构来保存总库存量,以及当前的订单量,如下:

在这里插入图片描述

判断过程可能如下图:

在这里插入图片描述

这里判断库存是否充足,以及将订单数+1的逻辑必须是原子的,不然可能出现超卖情况的发生。而想要保证原子性,可以是单命令操作,也可以使用lua脚本,这里明显只能使用lua脚本,如下:

在这里插入图片描述

这里的k是用户的购买数量。

判断库存充足后,接着就是下单操作了,这个下单动作是使用redis来做还是适用后端的关系型数据来做呢,答案是后端的关系型数据库,原因如下:

1:订单和后续的支付,发货等关系密切,而这些信息的关系维护都是在数据库表中的
2:订单生成的压力不大,可以在后端完成

为了增加响应用户的速度,这个生成订单的过程可以通过基于消息队列的异步方式来完成,即判断库存充足后,直接向消息队列发送一个生产订单的消息就行了,之后用户的支付,发货等过程就都可以依赖于后端服务了。

1.3:秒杀后

秒杀后,可能还有部分用户等待别人退款所以还在不断刷新页面,已下订单的用户支付超时等情况,但这些并发量都不大,也用不到redis,使用后端服务来处理就可以了,但是还是需要维护redis中的订单数量,不然就会出现数据不一致了,这个压力也不大。

2:可能有哪些问题

2.1:redis挂了怎么办?

为了保证redis的高可用,可以使用redis哨兵 来配置读写分离的集群,当主节点宕机后,自动执行主从切换,但是这有个问题需要注意,就是从节点可能是存在延迟的,即订单数量可能是实际订单数量要少的,可能出现超卖,这个时候可以从数据库中同步一次订单数量,保证订单数量的正确性。

当然还有很多其它的细节问题,需要我们在实际场景中充分考虑,尽量做到完美。

写在后面

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

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

相关文章

什么是用户增长? (超详细)

一.概况 原因:随着人口红利的衰减,互联网流量红利的马太效应显现,这意味着成本的大幅度增加,企业必须改变过去粗放型的营销和运营方式,用更高效更低成本实现快速增长 定义:通过实验和数据驱动&#xff0c…

5.Linux实用操作

文章目录零、学习目标一、软件安装1、Linux系统的应用商店2、yum命令3、apt命令 - 扩展二、systemctl命令三、软连接四、下载和网络请求1、ping命令2、wget命令3、curl命令五、端口1、概念2、查看端口占用六、进程管理1、概念2、查看进程3、查看指定进程4、关闭进程七、主机状态…

SAP ABAP 开发管理 代码增强标记 位置使用清单(Mark of enhancement)

SAP ABAP 开发管理 代码增强标记 位置使用清单(Mark of enhancement) 引言: 代码增强标记 (Mark of enhancement)是我在 ABAP 开发中对增强管理的方法之一,是对 SAP 系统增强管理工具的补充。通过对代码增…

自学Python找不到工作?只要掌握这七大块,月薪15K轻轻松松

1. 开发环境和开发工具 python3.6下载 Download Python sublime Text 3 Sublime Text - Download pycharm下载 PyCharm :: Download Latest Version of PyCharm 2. python语法知识 个人推荐《Python从入门到实践》、《Python编程快速上手》 3. web框架 djangoh中文文档 D…

九、Docker 复杂安装之mysql主从复制

前面我们介绍了Docker 安装单机版mysql,如果没有看可以先看下:https://blog.csdn.net/u011837804/article/details/128315385 本篇学习的前提是懂得mysql主从复制的原理,话不多说,我们开始。 1、下载mysql5.7镜像 涉及命令: 查看本地镜像命令:docker images拉取mysql5…

最近邻 M 点

一 问题描述 在 K 维空间中有很多点,给定一个点,找出最近的 M 个点。点 p 和点 q 之间的距离是连接它们的直线段的长度。 二 输入和输出 1 输入 有多个测试用例。第 1 行包含两个非负整数 n 和 k ,分别表示点数和维数,1≤n≤5…

Python: unittest框架

目录 1.0 接口自动化框架设计 2.0 分层设计框架 3.0 接口配置文件 3.1 测试用例数据 4.0 框架执行入口 4.1 测试函数 4.1.1 参数替换 4.1.2 发送请求处理 4.1.3 响应断言 4.1.4 提取全局变量 4.1.5 数据库断言 5.0 工具类 5.1.1 excel文件处理 5.1.2 数…

直呼内行阿里离职带出内网专属“高并发系统设计”学习笔记

前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务…

python 之 pandas数据处理

目录 一:读取文件 二:查看数据 三:获取数据 四:按标签选择 五:按照位置选择 六:布尔索引 七:缺失值 一:读取文件 read_csv 加载文件 df pd.read_csv("classify.csv&quo…

SPRING-了解2-XML

两种bean Spring中有两种bean:一种普通bean,另外一种工厂bin (Factory Bin&#xff0c;注意不是前面说的BeanFactory类) 普通Bean:xml中定义什么类型返回的就是什么类型 <bean id"book" class"com.i7i8i9.spring5.collectiontype.Book"> xml中clas…

Linux 应用基础 Framebuffer应用编程

文章目录前言一、了解Framebuffer二、了解LCD1.LCD的操作原理2.LCD坐标三. Framebuffer 程序分析1. 打开设备&#xff1a;&#xff08;open&#xff09;2. 获取LCD参数 : ( ioctl )3. 映射 framebuffer: ( mmap )四. 描点函数&#xff1a; &#xff08; lcd_put_pixel &#xf…

【OpenFOAM】-olaFlow-算例3- currentWaveFlume

算例路径&#xff1a; olaFlow\tutorials\currentWaveFlume 算例描述&#xff1a; 波流耦合模拟&#xff0c;该算例提供了四种工况&#xff1a;(1) Waves and forward current&#xff0c;(2) Waves and backward current&#xff0c;(3) Forward current only&#xff0c;(4) …

【LSTM预测】基于卷积神经网络结合双向长短时记忆CNN-BiLSTM(多输入单输出)数据预测含Matlab源码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【云服务器 ECS 实战】一文掌握负载均衡服务原理及配置方法

一、负载均衡基本原理概述协议/端口轮询策略会话保持二、云服务器 ECS 负载均衡相关配置协议&监听配置后端服务器配置健康检查配置测试在上期文章中&#xff0c;介绍了负载均衡的概述及优势&#xff0c;并详细演示了阿里云服务器负载均衡服务的选型与购买配置。本期文章我们…

字节最新秋招面试题泄露,“背完”这些你也可以拿到字节offer

Java 一面基本上都是基础题&#xff0c;同样是 CURD 的活&#xff0c;谁更熟练要谁&#xff0c;比如下面这些面试题&#xff0c;八股文越熟练越容易通过 Java 面试。下面会给大家详解的介绍一下每个技术点的必问问题&#xff01; 一、Java 基础 1.JDK动态代理和CGLIB动态代理的…

12月18日第壹简报,星期日,农历十一月廿五

12月18日第壹简报&#xff0c;星期日&#xff0c;农历十一月廿五1. 官方&#xff1a;预计我国今年经济总量超过120万亿元&#xff0c;明年经济有望总体回升。2. 多地血库告急&#xff0c;两部门修改“指引”&#xff1a;最后一次新冠核酸或抗原阳性结果7天后可献血。3. 北京&am…

Wireshark 实验

本部分按照数据链路层、网络层、传输层以及应用层进行分类&#xff0c;共有 10 个实验。需要使用协议分析软件 Wireshark 进行&#xff0c;请根据简介部分自行下载安装。 准备 请自行查找或使用如下参考资料&#xff0c;了解 Wireshark 的基本使用&#xff1a; 选择对哪块网…

DropBox系列-打造车载系统APM框架

前言&#xff1a; 作者本人负责公司的APM监控模块&#xff0c;因为工作的原因&#xff0c;对ANR&#xff0c;crash等流程研究的比较多&#xff0c;最近在打造APM监控平台的时候&#xff0c;顺带对DropBox的实现原理进行了一定的学习和研究&#xff0c;发现了一些妙用&#xff…

【DELM回归预测】基于海鸥算法改进深度学习极限学习机SOA-DELM实现数据回归预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

基于java+springmvc+mybatis+vue+mysql的疫情时期药物管理系统

项目介绍 前端页面&#xff1a; 功能&#xff1a;首页、医生、药品信息、药品资讯、个人中心、后台管理、在线客服 管理员后台管理页面&#xff1a; 功能&#xff1a;首页、个人中心、用户管理、医生管理、药品类别管理、药品信息管理、药品购买管理、在线咨询管理、系统管理…