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

Posted dissun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发场景下秒杀项目静态锁的使用疑问相关的知识,希望对你有一定的参考价值。

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

请高手赐教

以上是关于高并发场景下秒杀项目静态锁的使用疑问的主要内容,如果未能解决你的问题,请参考以下文章

解密高并发系统实战内幕

解密高并发系统实战内幕

高并发高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

掌握这些,高并发秒杀系统就不用担心了!

如何设计一个高可用高并发秒杀系统

看了这个高并发系统架构,才知道我对秒杀的误解有多深