zoukankan      html  css  js  c++  java
  • 高并发场景下秒杀项目静态锁的使用疑问

    题:高并发场景下秒杀项目静态锁的使用疑问
    场景:我们有一个秒杀平台,可以提供所有接入公司创建的秒杀活动,简单描述如下:
    1、秒杀10袋洗衣粉,开始时间12:00(项目ID:A001)
    2、秒杀iPhone5,开始时间12:00(项目ID:A002)
    3、秒杀水杯,开始时间12:00(项目ID:A003)
    ... ...(项目ID:A004-A009)
    10、秒杀ThinkPad,开始时间12:00(项目ID:A010)

    例如上面,同时有十个秒杀,都是12:00整开始,每个秒杀之间没有任何关系。

    按照我之前的有限的非高并发场景经验,比较好处理,在一个方法中使用全局静态锁,保证库存扣减的安全性。

    private static object myLock=new object();
    public int MiaoShaFunc()
    {
      if(项目X库存>0)
      {
        lock锁住(myLock)
        {
          if(项目X库存>0)
          {
            //TODO:一系列扣减操作
          }
        }
      }
    }


    但是,现在的问题是,当高并发场景下,每一个项目都可能有海量的用户在进行秒杀操作,而十个秒杀项目同时进行,当秒杀项目A001锁住myLock时,其他的A002-A010调用该方法的项目都会收到影响,从而导致大面积的等候。

    请问,这种场景该怎么优化?是不是存在某种方案,可以按一定条件,只锁住一部分流量,例如A001项目的用一个锁,A002用另外一个锁这样的方案?

    请高手赐教

  • 相关阅读:
    行为型模式之备忘录模式
    行为型模式之中介者模式
    行为型模式之迭代器模式
    行为型模式之解释器模式
    行为型模式之命令模式
    行为型模式之职责链模式
    结构型模式之代理模式
    结构型模式之享元模式
    进入Linux的新世界
    302转向与网址劫持(转)
  • 原文地址:https://www.cnblogs.com/dissun/p/8331471.html
Copyright © 2011-2022 走看看