zoukankan      html  css  js  c++  java
  • 秒杀库存的简单控制

    场景,秒杀活动,有商品A, 100个,价格0.01元,每人只能购买一个,在中午12:00开放购买,价格实惠,肯定好多人抢着购买。

    这样就涉及到并发,就是说查出库存后到更新库存的过程,会存在其它请求修改库存的情况。

    解决方法是在更新库存的时候,加个条件库存>0,如果执行sql返回影响的行数是0,就执行回滚,提示已售完。

    sql如 update store_table set store_num = store_num - 1 where good_id = 111 and store_num > 0。

    这里还有个要控制,一个人只能购买一个,可以加一个表,字段有user_id和good_id,设为唯一索引,在处理时判断是否存在,存在就回滚,但判断后另一个请求又有可能插入,那么本次插入就会报错了,虽然不太友好,便起到控制效果。

    (非原创)
    1. 尽量将请求拦截在系统上游:
    2. 读多写少,多使用缓存

    • 浏览器和app:做限速,限制用户在X秒之内只能提交一次请求(比如虽然你在疯狂的摇微信,但其实x秒后才向后端发起一次请求)
    • 站点层:按照uid做限速,做页面缓存,这时用uid,一个uid5秒只准透过一个请求。这样就能拦住99%的for循环请求。
    • 服务层:按照业务做写请求队列控制流量(每个提供服务的服务器各一个队列)(每次只透有限的写请求去数据层,如下订单,做支付这样的写业务)。3k张火车票,只透3k个下单去db
    • 数据层:这时已经没有多少压力了。全部透到数据库,100w个下单,0个成功,请求有效率是0%;透3k个请求到数据,全部成功,请求有效率100%

    3万个商品高并发下秒杀有什么方案实现超卖、少卖

  • 相关阅读:
    linux ssh免密
    flink WaterMark之TumblingEventWindow
    flink 并行计数器实现
    VSCode删除重复的空行
    Gnome添加Open with Code菜单
    Linux下设置VSCode为默认的文本编辑器
    Jupyter Notebook添加Ruby支持
    Linux下无法运行Color picker
    oh-my-zsh: bracketed-paste-magic:zle:47: not enough arguments for -U
    Vim auto-pairs设置选项
  • 原文地址:https://www.cnblogs.com/jimzbom/p/7610039.html
Copyright © 2011-2022 走看看