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万个商品高并发下秒杀有什么方案实现超卖、少卖

  • 相关阅读:
    python
    mysql 操作
    you-get 使用代理
    恢复本地策略组--用于启动项管理等
    bat批处理——获取文件夹下所有文件名/重命名
    cmd--set用法,下次补充实例
    bat+7z批量压缩"文件夹"
    Excel提取字符串示例
    cron
    AIX修改用户密码登录不成功案例分享
  • 原文地址:https://www.cnblogs.com/jimzbom/p/7610039.html
Copyright © 2011-2022 走看看