首页 > 其他分享 >【IT老齐063】秒杀场景下解决商品库存超卖问题

【IT老齐063】秒杀场景下解决商品库存超卖问题

时间:2024-03-26 15:55:05浏览次数:19  
标签:063 库存 订单 redis 老齐 超卖

【IT老齐063】秒杀场景下解决商品库存超卖问题

超卖问题

1711094328414

1711094533318

核心问题

  • 秒杀商品库存总量固定
  • 先到先得,瞬间并发极大,但写库量有限

解决方案

1711094840674
1711094817934

  • 利用预减库存方式杜绝超卖
  • 利用Nginx+Lua在网关层面将无效请求阻挡
  • 利用MQ消息队列的限流特性保证MySQL不会被瞬间击垮
  • APP需要额外设计轮询机制查询订单状态

遗留问题

  • 订单取消或支付超时
    • 为订单设置过期时间,订单支付有效期过期或用户取消订单,LUA执行 incr“stk-1001”自增即可
    • 商品库存有放表里的情况,一定要先加表里的库存,再加redis的库存,保证redis的库存一定不能大于真实库存,不然会超卖
  • 库存为负数情况
    • 可以在redis加lua脚本保证大于等于0。

标签:063,库存,订单,redis,老齐,超卖
From: https://www.cnblogs.com/faetbwac/p/18096879

相关文章

  • 【IT老齐053】动静分离架构抗住超高并发访问
    【IT老齐053】动静分离架构抗住超高并发访问架构三大分离设计读写分离动静分离前后台分离概念有效区分页面中的动静数据是优化的关键前提静态数据是无个性化数据静态文件:HTML/CSS/JS/图片低频变动数据:字典数据/地区数据/组织架构历史数据动态数据就是个......
  • 【IT老齐054】MongoDB介绍
    【IT老齐054】MongoDB介绍场景特点多形性:同一个集合中可以包含不同字段(类型)的文档对象动态性:线上修改数据模式,修改是应用与数据库均无须下线数据治理:支持使用JSONSchema来规范数据模式。在保证模式灵活动态的前提下,提供数据治理能力速度优势数据库引擎只需要在......
  • 【IT老齐055】Mysql Ngram全文检索技术
    【IT老齐055】MysqlNgram全文检索技术场景select*fromarticlewheretitlelikeJava%可能用到索引,看索引选择性select*fromarticlewheretitledlike%Java一定不会用到索引select*fromarticlewheretitlelike%Java%一定不会用到索引解决......
  • 【IT老齐056】日千万级订单系统的高可用、高性能架构
    【IT老齐056】日千万级订单系统的高可用、高性能架构原始场景避免丢单关键逻辑不要使用读写分离的查询方式,避免从库同步延迟造成订单查询异常关键逻辑也不要使用缓存来进行订单的查询订单补偿不要粗暴地使用消息队列的方式,避免中间件引发的订单丢失接收消息处理......
  • 【IT老齐045】RabbitMQ六种队列模式
    【IT老齐045】RabbitMQ六种队列模式前情提要Producer:生产者,消息的提供者Consumer:消费者,消息的使用者Broker:MQ服务器,管理队列、消息及相关信息Message:消息,程序间的通信的数据Queue:队列,消息存放的容器,消息先进先出Exchange:交换机,用于分发消息工作模式简单模式工作队列......
  • 【IT老齐047】避坑UUID主键
    【IT老齐047】避坑UUID主键场景财政部金财工程平台在代理行日终结算时,经常出现磁盘的IO异常,导致经常出现高延迟对比发现在大量数据新增时磁盘IO居高不下,多次测试后发现是UUID主键在搞鬼UUID基于时间的UUID能保证不同设备UUID是唯一的在同一设备上生成UUID可能重复DC......
  • 【IT老齐046】RabbitMQ队列解决消息积压问题
    【IT老齐046】RabbitMQ队列解决消息积压问题场景每天上午10点,全国2万多名客户经理集中录入上一日JK单据到BorrowSale系统,峰值能达到500单/s。但信审系统任务重,最多只支持到60单/s,每日会导致大量消息积压解决方案工作队列RabbitMQ改为工作队列模式,将消息送给9个信审系统实......
  • 【IT老齐048】Kafka高性能原因
    【IT老齐048】Kafka高性能磁盘顺序读写定期批量删除指定数据页缓存Kafka避免使用JVM,直接使用操作系统的页缓存特性提高处理速度,进而避免了JVMGC带来的性能损耗。Kafka采用字节紧密存储,避免产生对象,这样可以进一步提高空间利用率零拷贝批量操作......
  • 防止超卖主要是通过分布式锁实现
    加分布式锁其实前面介绍过的加唯一索引或者加防重表,本质是使用了数据库的分布式锁,也属于分布式锁的一种。但由于数据库分布式锁的性能不太好,我们可以改用:redis或zookeeper。鉴于现在很多公司分布式配置中心改用apollo或nacos,已经很少用zookeeper了,我们以redis为例介绍分布式锁。......
  • P1063 [NOIP2006 提高组] 能量项链
    原题链接题解1.拆环成链2.最后一颗留下来的珠子一定是的头标记一定是某个原珠子\(A\)的头标记,尾标记一定是珠子\(A\)右边n个单位的珠子的尾标记3.对任意最大值而言,最后一颗一定是某两个珠子的合并后产生的,所以我们可以在区间内断点遍历\(Code\)#include<bits/stdc++.h>usin......