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

  • 相关阅读:
    MySQL索引管理及执行计划
    MySQL客户端工具及SQL讲解
    mysql数据类型
    mysq日志管理
    mysql连接管理及实例初始化配置
    mysql用户权限管理
    msyql5.6与mysql5.7安装区别
    mysql简介
    ASP.NET使用ImageMap控件
    ASP.NET Calendar(日历控件)
  • 原文地址:https://www.cnblogs.com/luizw/p/11266119.html
Copyright © 2011-2022 走看看