zoukankan      html  css  js  c++  java
  • 秒杀方案

    1.首先前端页面静态化,缓存;

    2.可通过Nginx或者gateway(网关)或者MQ来进行限流,以减小服务器压力;

    3.商品数据可预先存放至Redis以减小数据库压力:

    商品详情key:商品id+detail

                  value:商品详情

    商品库存key:商品id

                  value:库存数量

    4.页面可通过redis获取商品详情,判断秒杀时间等

    5.秒杀开始后:

    根据商品id获取redis中商品库存,若小于等于0则表示已抢光,否则可继续;redisTemplate.get(key)获取库存;

                                                         将redis中库存减1;redisTemplate.decr(key)库存减1;

    这里获取商品数量和库存减1,需保证同步,有两种方案:一种是使用分布式锁将获取数量与库存减一锁住锁的key用商品id;

                              :一种是使用watch库存减一后库存数量是否小于0,若小于零则回滚,返回秒杀失败;

    redis中获取商品成功后,通过mq异步将数据库商品库存减一,并插入订单,此处的修改商品库存和插入订单需在同一事物;

    付款时通过用户id和商品id查订单表,如果存在则有效,如果不存在则表示上一步修改库失败,将redis商品库存加1,并返回秒杀失败;

    参考文献:https://www.cnblogs.com/zyy1688/p/9638986.html

  • 相关阅读:
    最好的我们
    外滩
    外滩
    Java EE (5) -- Java EE 6 JavaServer Faces Developer Certified Expert(1z0-896)
    列表list(序列)、元组tuple(序列)
    P1165 日志分析 洛谷
    T1365 浴火银河星际跳跃 codevs
    T1503 愚蠢的宠物 codevs
    P2820 局域网 洛谷
    T1992 聚会 codevs
  • 原文地址:https://www.cnblogs.com/luizw/p/11266119.html
Copyright © 2011-2022 走看看