/// <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); }
/// <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); } }
/// <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); } }
/// <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)); } }
/// <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); } }
/// <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); }