高并发场景下秒杀项目静态锁的使用疑问

题:高并发场景下秒杀项目静态锁的使用疑问
场景:我们有一个秒杀平台,可以提供所有接入公司创建的秒杀活动,简单描述如下:
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用另外一个锁这样的方案?

请高手赐教

posted @ 2018-01-22 22:29  第三皇族DisSun  阅读(237)  评论(3编辑  收藏  举报