秒杀的理解

2023-05-16

项目场景:

秒杀限时或者限量的处理一件商品


实现理解:

秒杀业务流程
如果使用java逻辑判断减库存的话,会出现多个线程同时修改好库存,然后存入相同的修改值
实际上是卖出了多个 但是数据库只扣了一个库存,首先前台传进来商品ID,减库存(使用sql语句的stock=stock-1  这个会触发mysql的行级锁 适用于高并发的场景)。


 

 秒杀的高并发实现:利用Redis,来作为一级缓存。把商品id和库存放到redis里。使用stringRedisTemple.opsForValue().set(商品ID号,库存);设置进redis。然后,秒杀下单的时候传入商品ID号,自动递减redis里面的商品库存。stringRedisTemple.opsForValue().decrement(id号); 但是,这样会出现问题。

比如:下单异常的时候会出现redis和mysql扣的库存不一致。解决方法就是在处理异常的地方添加还原redis库存数量。stringRedisTemple.opsForValue().increment(id号);但是,这样还有可能在高并发时出现少买的情况,解决就是在比对redis里面的库存,判断库存小于0的时候,也添加还原库存的代码。

这样问题差不多都解决了。但是每次都要判断如果刚好最后一个进入多个线程,同样也要判断好多次,浪费资源,这时候可以使用jvm缓存同步。使用JUC标记。

private static concurrentHashMap<Long,Boolean> StockOut=new concurrentHashMap<>();

 在判断库存小于0的逻辑代码内,标记该商品号已售出为true.然后在进入这个判断之前直接判断该标记。这样提升了单体应用秒杀时候的并发量。如果是分布式的服务的话,因为每个服务的jvm不一样,无法同步在异常处理的时候还原该标记。我们可以使用队列(RabbitMq),来实现分布式服务的同步修改JVM标记。实现秒杀的性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

秒杀的理解 的相关文章

  • 服务器磁盘满了会导致ssl无法正常访问,进而导致网站样式错乱

    服务器磁盘满了会导致ssl无法正常访问 xff0c 进而导致网站样式错乱
  • 基于OpenMV和正点原子开发的自动追球小车(带云台舵机)

    电赛备赛前 xff0c 通过OpenMV加舵机云平台由 xff0c 做了一个追着球跑的小车 xff0c 由于疫情 xff0c 以前录制的视频也删除了 xff0c 最终呈现的效果和B站一位Up主的相似 xff0c 大家可以参考参考 xff0c
  • C语言For循环

    循环结构 xff1a 又称为重复结构 xff0c 在程序中处理问题需要重复处理 for循环语句 xff1a 使用灵活 可用于循环次数已确定或不确定循环次数的情况 for循环的一般结构 xff1a for xff08 表达式1 xff1b 表
  • Jetson tx2 安装jetpack_3.3手动安装cuda9.0,cudnn7.1

    1 刷机前的准备 xff08 写在前面的话 xff09 装有Ubuntu16 04或者Ubuntu18 04的电脑 xff0c 这里说的电脑可以是台式机也可以是笔记本与TX2区分开来 xff08 电脑是16 04或者18 04无所谓 xff
  • 【PX4无人机仿真】构建自己的ROS节点

    本篇文章主要是一个创建自己的ros节点的学习记录 xff0c 在学会创建简单的节点后 xff0c 参考一篇关于目标跟踪工作的博客进行了实践 xff0c 使用自己写的移动小球世界进行小球的跟踪 Demo参考 xff1a 无人机跟踪小车 文章目
  • 用U盘给nuc安装Ubuntu系统

    1 在Windows下载对应Linux的软件 xff08 一般为UNetbootin xff09 2 网上下载所需Ubuntu版本的iso文件 3 准备一个内存大于4g的U盘 4 双击运行第一步下载的软件 5 更改光盘镜像 xff0c 选择
  • keil5下载安装教程(附带兼容keil4方法)

    为了方便stm32和C51学习 xff0c 我收集资料整理了keil5的安装教程 xff0c 同时附带兼容keil4程序的方法 xff0c 避免大家在使用C51的时候再去安装keil4这个麻烦的过程 目录 一 可兼容keil4的keil5版
  • 第十三届蓝桥杯单片机设计与开发

    程序设计 客观题 感想 xff1a 这届单片机还是挺简单的 xff0c 和前几届的赛题有点像 xff0c 哦 xff0c 对 xff0c 就是第12届和第10届来着 大概2个半小时差不多全做完了 xff1b 当然客观题 xff0c 有几道不
  • PX4串口添加传感器—在QGC上添加串口数据显示

    前言 因为项目要求 xff0c xff08 在PX4上添加拉力传感器 xff0c 并把数据显示在QGC的地图上 xff09 xff0c 本人开始了苦皮的生活 从未接触飞控的我 xff0c 一来就是开发 烧脑掉发啊 但人生是无所畏惧的 在学习
  • STM32CubeMX——固件库下载以及安装

    前言 为了方便自己 xff0c 于是方便了大家 一 获取stm32Cube包 1 打开下面的链接 ST官网链接 2 下载stm32标准外设库 我要用STMCubeG413rbt6 xff0c 所以我选择STM32CubeG4系列 点击 点击
  • PX4串口添加传感器—QGC添加自定义mavlik消息

    简介 功能 xff1a 假设我想要飞控传输一个我定义的消息给地面站 xff0c 其地面站必须有一个接收处理的过程以及飞控处理发送的过程 我们传输的方式是mavlink通信方式 想要实现上面的功能 xff0c PX4和QGC就必须要有 1 修
  • 服务器扩容步骤

    第一步 xff1a 云服务器 ECS 云盘 扩容 勾选在线扩容 xff0c 提交订单 xff1b 第二步 xff1a 以此执行以下代码 xff1a 1 运行fdisk l命令查看现有云盘大小 root 64 ecshost fdisk l
  • PX4串口添加传感器—PX4添加自定义mavlik消息

    目录 1 建立 xml并生成mavlink自定义消息文件 1 1 打开终端克隆MAVLINK生成器 1 2 进入克隆目录 执行以下命令 1 3 随手建立储存文件夹 1 4 创建read uart sensor xml文件 1 5 打开MAV
  • 丢失ucrtbased.dll,缺啥补啥

    简介 xff1a 当我打包QGC的debug版本给别人 结果别人编译不了 xff0c 内容显示缺少ucrtbased dll文件 发现一个不错的网站 xff0c 缺少其他文件 xff0c 一样的方法 解决办法 xff1a 打开链接 xff1
  • 打开QGC软件主页没有显示,弹窗白板问题

    目录 问题描述 解决办法 问题描述 正常情况下 xff0c QGC打开是直接就弹出显示页面 但当我打开编译过的debug版本QGC xff0c 会出现一个大约1秒的弹窗 xff0c 之后QGC没有显示 我在旁边的任务栏中查看 xff0c 发
  • Ubuntu/Linux文件权限修改

    Ubuntu Linux文件权限 文件权限是指不同的用户或用户组对某个文件拥有的权限 xff0c 文件的权限分为三种 xff1a r xff1a 读 w xff1a 写 x xff1a 可执行 文件描述形式如下 xff1a rw rw r
  • RTOS必备基础

    RTOS必备基础 一 ARM基础知识1 ARM架构2 重要寄存器3 汇编指令详解读 xff1a load写 store加 ADD减 SUB出栈 push出栈 xff1a pop 4 栈和堆 xff1a 1 栈2 堆 5 局部变量和全局变量的
  • STM32必备知识点(面试和工作用的到)

    STM32必备知识点 xff08 面试和工作用的到 xff09 文章目录 STM32必备知识点 xff08 面试和工作用的到 xff09 前言嵌入式C基础一 位操作1 不改变其他位的值的状况下 xff0c 对某几个位进行设值2 移位操作提高
  • 嵌入式C语言必备知识(面试和工作都用得到)

    嵌入式C语言必备知识 xff08 面试和工作都用得到 xff09 一 基础部分1 数组与链表的区别 xff1f 2 C语言程序代码优化方法3 堆和栈的的区别 xff1f 4 内联函数的优缺点和适用场景是什么 xff1f 4 下面代码输出是什
  • SBUS协议介绍和标准例程

    SBUS信号例程详解 1 SBUS信号简介1 硬件标准2 软件标准1 串口配置 xff1a 2 协议格式 xff1a 3 数据范围4 间隔问题 2 STM32F4 Sbus xff08 DMA 43 串口 xff09 xff08 1 xff

随机推荐

  • RT-Thread静态线程和动态线程的区别

    RT Thread 内核采用面向对象的设计思想进行设计 xff0c 系统级的基础设施都是一种内核对象 xff0c 例如线程 xff0c 信号量 xff0c 互斥量 xff0c 定时器等 内核对象分为两类 xff1a 静态内核对象和动态内核对
  • UART协议入门

    UART 硬件连接关键词 xff1a 1 UART为串行异步协议2 TTL RS232 RS485是一种逻辑电平表示方式 3 帧格式 xff1a 1位空闲位 xff0c 5 9位的数据位 xff0c 1位校验位 xff0c 1 2位的停止位
  • git操作手册

    初始化一个Git仓库 xff0c 使用git init命令 添加文件到Git仓库 xff0c 分两步 xff1a 使用命令git add lt file gt xff0c 注意 xff0c 可反复多次使用 xff0c 添加多个文件 xff1
  • STM32 开发常见问题汇总

    STM32 开发常见问题汇总 一 xff0c STM32 Usart 串口异常四个错误检测标志 xff1a 十个具有标志位的中断源 xff1a 1 Usart中断事件2 Usart状态寄存器3 Usart问题解决3 1 什么是ORE中断 x
  • Gitee克隆别人的仓库的操作步骤

    1 指定克隆仓库路径 以及克隆到本地项目自定义名称 可以克隆提交者配置的url映射 但是不能克隆提交者的账号 git config git clone https gitee com lisi giteedemo giteedemo 2 配
  • c++八数码难题全家桶(A*算法、双向BFS、BFS、DFS)

    文章目录 系列文章目录前言 目录 系列文章目录 文章目录 前言 一 八数码难题是什么 xff1f 二 算法详解 1 首先利用逆序数来判断是否有解 xff08 奇偶性相同即可达 xff09 2 A 算法 3 双向BFS 4 BFS 5 DFS
  • Horspool (String Matching)

    Description of Horspool Assumation text string the string where we want to locate the pattern string n the length of the
  • C语言课程设计学生成绩管理系统二(含完整代码)

    亲给个打赏吧 1 系统功能 xff08 1 xff09 通过菜单的形式实现人机交互界面 xff08 2 xff09 实现录入学生基本信息和成绩功能 xff08 3 xff09 实现删除指定学生的基本信息和成绩功能 xff08 4 xff09
  • UNIX环境高级编程笔记

    UNIX环境编程 一 UNIX基础知识1 1 Linux 主要特性1 2 Linux 内核1 3 Linux 目录结构1 4 登录1 登录名2 shell 1 5 输入和输出1 文件描述符2 标准输入 标准输出 标准错误3 不带缓冲的IO4
  • 使用TensorFlow Serving进行模型的部署和客户端推理

    目的 xff1a 在一个server端使用TensorFlow框架对模型进行训练和保存模型文件后用TensorFlow Serving进行部署 xff0c 使得能在客户端上传输入数据后得到server端返回的结果 xff0c 实现远程调用的
  • spring boot自动打开浏览器和配置打开首页

    目录 前言 一 配置自动打开浏览器 在启动器同级目录下创建config文件夹来放启动配置类 下面是application properties的配置 二 配置默认首页 总结 前言 如何配置自动打开浏览器 和默认页面设置 一 配置自动打开浏览
  • 使用内网穿透工具natapp

    一 使用准备 1 进入他的官网注册一个账号 NATAPP 内网穿透 基于ngrok的国内高速内网映射工具 注意 这个账号还必须要提交实名认证 2 然后登陆进去 选择 购买隧道 gt 免费隧道 然后最重要的是配置一下免费隧道的协议 选择web
  • 在linux下安装docker

    文章目录 目录 文章目录 前言 一 docker 二 使用步骤 1 环境准备 2 安装 三 配置阿里云镜像加速 四 卸载 总结 前言 一 docker 镜像 xff08 image xff09 xff1a docker镜像就好比是一个模板
  • git分支管理开发

    1 master从来都只是最终合并的分支 xff1b 2 所有的其他分支都从master衍生 xff1b 3 在master分支直接修改 xff0c 有可能会造成所有分支的冲突 4 都是从master建立新分支 xff0c 修改测试通过后合
  • Docker的常用命令

    文章目录 目录 文章目录 前言 一 帮助命令 二 镜像命令 1 查看镜像 2 搜索镜像 3 下载镜像 4 删除镜像 三 容器命令 1 启动容器 2 查看容器 3 退出容器 4 删除容器 5 启动和停止容器 四 常用的其它命令 后台运行 查看
  • spring cloud gateway网关和链路监控

    文章目录 目录 文章目录 前言 一 网关 1 1 gateway介绍 1 2 如何使用gateway 1 3 网关优化 1 4自定义断言和过滤器 1 4 1 自定义断言 二 Sleuth 链路追踪 2 1 链路追踪介绍 2 2 Sleuth
  • sso单点登录

    文章目录 目录 文章目录 前言 一 sso结构实现 二 使用步骤 2 1 建一个spring cloud 项目 2 2 common下的core的配置 2 3 实现系统的业务微服务 2 4 sso模块的编写 总结 前言 单点登录 Singl
  • windows版 redis在同一局域网下互联

    项目场景 xff1a 同一局域网下各个主机互相连接同一个redis 问题描述 无法连接 原因分析 xff1a 没有放行对方的地址 解决方案 xff1a 修改配置文件 最重要的一步如下 然后把 redis windows conf的文件也照上
  • mysql数据库之存储过程

    文章目录 目录 文章目录 前言 一 存储引擎 1 1 InnoDB 1 2 MyISAM 二 存储过程 2 1 存储过程 2 1 1 创建存储过程 2 1 2 调用存储过程 2 1 3 查看存储过程 2 1 4 删除存储过程 2 2 语法
  • 秒杀的理解

    项目场景 xff1a 秒杀限时或者限量的处理一件商品 实现理解 xff1a 秒杀业务流程 如果使用java逻辑判断减库存的话 xff0c 会出现多个线程同时修改好库存 xff0c 然后存入相同的修改值 实际上是卖出了多个 但是数据库只扣了一