/// <summary> /// 生产 /// </summary> /// <param name="userId"></param> /// <param name="seckillArticleId"></param> /// <returns> /// 1:下单成功、 /// 0:下单失败 /// </returns> public int PushRedis(String userId, string seckillArticleId) { ModelQueueParam modelQueue = new ModelQueueParam(); modelQueue.userId = userId; modelQueue.seckillArticleId = seckillArticleId; //总值模式 lock (lockRedis) { if (GlobalParam.queueStockrNum > 0) { modelQueue.goodQuantity = GlobalParam.queueStockrNum; GlobalParam.queueStockrNum--; //进行生产-可以下单 #region 使用reids队列进行储存 var jsonStr = JsonHelp.ToJsonString(modelQueue); _redisdb.ListLeftPush("order-key", jsonStr); #endregion return(1); } else { //库存已使用完成 return(0); } } }
/// <summary> /// 生产 /// </summary> /// <param name="userId"></param> /// <param name="seckillArticleId">秒杀商品id</param> /// <returns> /// 1:下单成功、 /// 0:下单失败 /// </returns> public int PushRedis(String userId, string seckillArticleId) { ModelQueueParam modelQueue = new ModelQueueParam(); modelQueue.userId = userId; modelQueue.seckillArticleId = seckillArticleId; //总值模式 lock (lockRedis) { //使用redis存储库存 int stockNum = (int)_redisdb.StringGet(seckillArticleId); if (stockNum > 0) { modelQueue.goodQuantity = stockNum; //此处是为了证明插入顺序和消费顺序一致 stockNum--; _redisdb.StringSet(seckillArticleId, stockNum); //进行生产-可以下单 #region 使用reids队列进行储存 var jsonStr = JsonHelp.ToJsonString(modelQueue); _redisdb.ListLeftPush("stock-y", jsonStr); #endregion return(1); } else { //库存已使用完成 return(0); } } }
/********************** 帮助方法*****************************/ #region 使用ConcurrentQueue队列处理 #region 生产 /// <summary> /// 生产 /// </summary> /// <param name="userId"></param> /// <param name="seckillArticleId"></param> /// <returns> /// 1:下单成功、 /// 0:下单失败 /// </returns> public int Push(String userId, string seckillArticleId) { ModelQueueParam modelQueue = new ModelQueueParam(); modelQueue.userId = userId; modelQueue.seckillArticleId = seckillArticleId; lock (GlobalParam.queue) { //总值模式 if (GlobalParam.queueStockrNum > 0) { GlobalParam.queueStockrNum--; //进行生产-可以下单 GlobalParam.queue.Enqueue(modelQueue); return(1); } else { //库存已使用完成 return(0); } //队列记录模式 //if (GlobalParam.queueNum.TryDequeue(out i)) //{ // //进行生产 // GlobalParam.queue.Enqueue(modelQueue); // return 1; //} //else //{ // //没有库存 // return 0; //} } }