Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="hashId"></param>
        /// <returns></returns>
        public static Dictionary <string, string> GetHash(string hashId)
        {
            Dictionary <string, string> dict = new Dictionary <string, string>();

            using (IRedisClient redis = RedisManager.GetClient())
            {
                dict = redis.GetAllEntriesFromHash(hashId);

                redis.Dispose();
            }
            return(dict);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 批量设置hash的 key-values
        /// </summary>
        /// <param name="hashId"></param>
        /// <param name="keyValuePairs"></param>
        public static void SetRangeInHash(string hashId, IEnumerable <KeyValuePair <string, string> > keyValuePairs)
        {
            var valuePairs = keyValuePairs as KeyValuePair <string, string>[] ?? keyValuePairs.ToArray();

            if (!valuePairs.Any())
            {
                return;
            }
            using (IRedisClient redis = RedisManager.GetClient())
            {
                redis.SetRangeInHash(hashId, valuePairs);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 批量设置hash的 key-values
        /// </summary>
        /// <param name="hashId"></param>
        /// <param name="keyValuePairs"></param>
        public static void SetRangeInHash <T>(string hashId, IEnumerable <KeyValuePair <string, T> > keyValuePairs)
        {
            if (!keyValuePairs.Any())
            {
                return;
            }
            List <KeyValuePair <string, string> > valuePairs = new List <KeyValuePair <string, string> >();

            foreach (var item in keyValuePairs)
            {
                valuePairs.Add(new KeyValuePair <string, string>(item.Key, JsonHelper.JsonSerializer(item.Value)));
            }
            using (IRedisClient redis = RedisManager.GetClient())
            {
                redis.SetRangeInHash(hashId, valuePairs);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 获取整个hash的数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="hashId"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static T GetHashValue <T>(string hashId, string key)
        {
            if (string.IsNullOrEmpty(hashId) || string.IsNullOrEmpty(key))
            {
                return(default(T));
            }
            using (IRedisClient redis = RedisManager.GetClient())
            {
                string temp = redis.GetValueFromHash(hashId, key);
                if (!string.IsNullOrEmpty(temp))
                {
                    return(JsonHelper.JsonDeserialize <T>(temp));
                }

                return(default(T));
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 获取整个hash的数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="hashId"></param>
        /// <returns></returns>
        public static List <T> GetHashValues <T>(string hashId)
        {
            using (IRedisClient redis = RedisManager.GetClient())
            {
                List <T> result = new List <T>();

                List <string> list = redis.GetHashValues(hashId);

                if (list != null && list.Count > 0)
                {
                    foreach (var temp in list)
                    {
                        if (!string.IsNullOrEmpty(temp))
                        {
                            result.Add(JsonHelper.JsonDeserialize <T>(temp));
                        }
                    }
                }
                return(result);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="tuples">
        /// <para>Item1:活动Id</para>
        /// <para>Item2:商品Id</para>
        /// <para>Item3:购买数量</para>
        /// </param>
        /// <param name="userId">下订单用户</param>
        /// <returns>
        /// <para>Item1:活动Id</para>
        /// <para>Item2:商品Id</para>
        /// <para>Item3:购买数量</para>
        /// <para>Item4:本次购买后,当前用户购买数量</para>
        /// </returns>
        public static List <Tuple <string, string, long, long> > ListHIncr(List <Tuple <string, string, int> > tuples, Guid userId)
        {
            List <Tuple <string, string, long, long> > result = new List <Tuple <string, string, long, long> >();

            if (tuples != null && tuples.Any())
            {
                using (IRedisClient redis = RedisManager.GetClient())
                {
                    List <long>      sussessList = new List <long>();
                    List <Exception> errList     = new List <Exception>();

                    List <long>              sussessUlList  = new List <long>();
                    List <Exception>         errUlList      = new List <Exception>();
                    List <long>              sussessPUlList = new List <long>();
                    List <Exception>         errPUlList     = new List <Exception>();
                    Dictionary <string, int> dictPro        = new Dictionary <string, int>();
                    int cnt = 0;
                    using (var pineline = redis.CreatePipeline())
                    {
                        for (int i = 0; i < tuples.Count; i++)
                        {
                            //pineline.QueueCommand 第二、三个参数是action回调,此处必须在for里声明cur,或者学习js闭包做法:
                            //m=>new Action<int>((j) =>
                            //   {
                            //        sussessList[j] = m;
                            //   })(cur)
                            int cur = i;
                            sussessList.Add(0);
                            sussessUlList.Add(0);
                            errList.Add(null);
                            errUlList.Add(null);
                            Tuple <string, string, int> tmpTuple = tuples[cur];
                            var promotionId         = tmpTuple.Item1; //活动Id
                            var proCommodityId      = tmpTuple.Item2; //商品Id
                            var orderCommodityCount = tmpTuple.Item3; //购买数量

                            pineline.QueueCommand(c => c.IncrementValueInHash(RedisKeyConst.ProSaleCountPrefix + promotionId, proCommodityId, orderCommodityCount), m => sussessList[cur] = m, e => errList[cur] = e);
                            pineline.QueueCommand(c => c.IncrementValueInHash(RedisKeyConst.UserLimitPrefix + promotionId + ":" + proCommodityId, userId.ToString(), orderCommodityCount), m => sussessUlList[cur] = m, e => errUlList[cur] = e);
                        }
                        dictPro = tuples.GroupBy(c => c.Item1).ToDictionary(x => x.Key, y => y.Sum(m => m.Item3));
                        cnt     = 0;
                        foreach (var item in dictPro)
                        {
                            var xy = cnt;
                            sussessPUlList.Add(0);
                            errPUlList.Add(null);

                            pineline.QueueCommand(c => c.IncrementValueInHash(RedisKeyConst.UserPromotionLimitPrefix + item.Key, userId.ToString(), item.Value), m => sussessPUlList[xy] = m, e => errPUlList[xy] = e);
                            cnt++;
                        }
                        pineline.Flush();
                    }
                    bool hasError = errList.Count(c => c != null) > 0 || errUlList.Count(c => c != null) > 0 || errPUlList.Count(c => c != null) > 0;
                    if (hasError)
                    {
                        for (int i = 0; i < tuples.Count; i++)
                        {
                            if (errList[i] == null)
                            {
                                Tuple <string, string, int> tmpTuple = tuples[i];
                                var promotionId         = tmpTuple.Item1; //活动Id
                                var proCommodityId      = tmpTuple.Item2; //商品Id
                                var orderCommodityCount = tmpTuple.Item3; //购买数量
                                redis.IncrementValueInHash(RedisKeyConst.ProSaleCountPrefix + promotionId, proCommodityId, -orderCommodityCount);
                            }

                            if (errUlList[i] == null)
                            {
                                Tuple <string, string, int> tmpTuple = tuples[i];
                                var promotionId         = tmpTuple.Item1; //活动Id
                                var proCommodityId      = tmpTuple.Item2; //商品Id
                                var orderCommodityCount = tmpTuple.Item3; //购买数量
                                redis.IncrementValueInHash(RedisKeyConst.UserLimitPrefix + promotionId + ":" + proCommodityId, userId.ToString(), -orderCommodityCount);
                            }
                        }
                        cnt = 0;
                        foreach (var item in dictPro)
                        {
                            if (errPUlList[cnt] == null)
                            {
                                redis.IncrementValueInHash(RedisKeyConst.UserPromotionLimitPrefix + item.Key, userId.ToString(), -item.Value);
                            }
                            cnt++;
                        }
                        return(result);
                    }
                    for (int i = 0; i < sussessList.Count; i++)
                    {
                        result.Add(new Tuple <string, string, long, long>(tuples[i].Item1, tuples[i].Item2, sussessList[i], sussessUlList[i]));
                    }
                }
            }
            return(result);
        }