예제 #1
0
        /// <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);
                }
            }
        }
예제 #3
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;
                //}
            }
        }