예제 #1
0
 /// <summary>
 ///     从指定hashid,keys中获取指定hash集合
 /// </summary>
 /// <param name="hashId"></param>
 /// <param name="keys"></param>
 /// <returns></returns>
 public List <string> GetValuesFromHash(string hashId, List <string> keys)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             var list = new List <string>();
             if ((keys != null) && (keys.Count > 0))
             {
                 var rv = new RedisValue[keys.Count];
                 for (var i = 0; i < keys.Count; i++)
                 {
                     rv[i] = keys[i];
                 }
                 var vlts = cnn.GetDatabase().HashGet(hashId, rv);
                 foreach (var val in vlts)
                 {
                     if (!string.IsNullOrEmpty(val) && val.HasValue)
                     {
                         list.Add(val);
                     }
                 }
             }
             return list;
         }
     }));
 }
예제 #2
0
        /// <summary>
        /// 批量获取
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="keys"></param>
        /// <returns></returns>
        public List <T> BatchStringGet <T>(List <string> keys) where T : class, new()
        {
            return(DoWithRetry(() =>
            {
                using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
                {
                    var batch = cnn.GetDatabase().CreateBatch();

                    List <Task <RedisValue> > tasks = new List <Task <RedisValue> >();

                    foreach (var key in keys)
                    {
                        tasks.Add(batch.StringGetAsync(key));
                    }
                    batch.Execute();

                    List <T> result = new List <T>();

                    foreach (var task in tasks)
                    {
                        result.Add(SerializeHelper.Deserialize <T>(task.GetAwaiter().GetResult()));
                    }

                    return result;
                }
            }));
        }
예제 #3
0
 /// <summary>
 /// 从指定hashid,keys中获取指定hash集合
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="hashId"></param>
 /// <param name="keys"></param>
 /// <returns></returns>
 public Dictionary <string, T> GetValuesDicFromHash <T>(string hashId, List <string> keys) where T : class, new()
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             var dic = new Dictionary <string, T>();
             if ((keys != null) && (keys.Count > 0))
             {
                 var rv = new RedisValue[keys.Count];
                 for (var i = 0; i < keys.Count; i++)
                 {
                     rv[i] = keys[i];
                 }
                 var vlts = cnn.GetDatabase().HashGet(hashId, rv);
                 for (int i = 0; i < vlts.Length; i++)
                 {
                     if (!string.IsNullOrEmpty(vlts[i]))
                     {
                         var obj = SerializeHelper.Deserialize <T>(vlts[i]);
                         if (obj != null)
                         {
                             dic.Add(rv[i], obj);
                         }
                     }
                 }
             }
             return dic;
         }
     }));
 }
예제 #4
0
        /// <summary>
        /// 获取SortedSet集合区间
        /// </summary>
        /// <param name="setid"></param>
        /// <param name="minScore"></param>
        /// <param name="maxScore"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="orderBy"></param>
        /// <returns></returns>
        public PagedList <string> GetSortedSetRangeByRankBySocre(string setid, double minScore, double maxScore, int pageIndex = 1,
                                                                 int pageSize = 20, bool orderBy = true)
        {
            return(DoWithRetry(() =>
            {
                using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
                {
                    var count = cnn.GetDatabase().SortedSetLength(setid, minScore, maxScore);
                    if (count > 0)
                    {
                        var list = cnn.GetDatabase().SortedSetRangeByScore(setid, minScore, maxScore, Exclude.Stop, orderBy ? Order.Ascending : Order.Descending, (pageIndex - 1) * pageSize, pageSize);

                        if (list != null && list.Any())
                        {
                            var result = new List <string>();

                            foreach (var item in list)
                            {
                                result.Add(item.ToString());
                            }

                            return new PagedList <string>
                            {
                                PageIndex = pageIndex,
                                PageSize = pageSize,
                                Count = count,
                                List = result
                            };
                        }
                    }
                    return new PagedList <string>();
                }
            }));
        }
예제 #5
0
        /// <summary>
        ///     出队
        /// </summary>
        /// <param name="listId"></param>
        /// <returns></returns>
        public string Dnqueue(string listId)
        {
            return(DoWithRetry(() =>
            {
                string result;
                using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
                {
                    result = cnn.GetDatabase().ListRightPop(listId);

                    if (!string.IsNullOrEmpty(result))
                    {
                        return result;
                    }

                    // 在多写队列中, 比如F5后面挂了多个redis。
                    for (int i = 0; i < cnn.Pool.PoolSize - 1; i++)
                    {
                        result = cnn.GetDatabaseFromNextConnection().ListRightPop(listId);

                        if (!string.IsNullOrEmpty(result))
                        {
                            return result;
                        }
                    }

                    return null;
                }
            }));
        }
예제 #6
0
 /// <summary>
 /// 获取服务器信息
 /// </summary>
 /// <returns></returns>
 public string GetServerInfo()
 {
     using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
     {
         return(cnn.GetServerInfo());
     }
 }
예제 #7
0
 /// <summary>
 ///     分页某个hashid下面hash
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="hashID"></param>
 /// <param name="pageIndex"></param>
 /// <param name="pageSize"></param>
 /// <returns></returns>
 public List <T> HashGetAll <T>(string hashID, int pageIndex, int pageSize) where T : class, new()
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             var result = new List <T>();
             pageIndex = pageIndex > 0 ? pageIndex : 1;
             pageSize = pageSize > 0 ? pageSize : 20;
             var list =
                 cnn.GetDatabase().HashValues(hashID).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
             if ((list != null) && (list.Count > 0))
             {
                 list.ForEach(value =>
                 {
                     if (!string.IsNullOrEmpty(value) && value.HasValue)
                     {
                         var obj = SerializeHelper.Deserialize <T>(value.ToString());
                         if (obj != null)
                         {
                             result.Add(obj);
                         }
                     }
                 });
             }
             return result;
         }
     }));
 }
예제 #8
0
 /// <summary>
 ///     获取某个hashid下面全部hash
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="hashId"></param>
 /// <returns></returns>
 public List <T> HashGetAll <T>(string hashId) where T : class, new()
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             var result = new List <T>();
             var list = cnn.GetDatabase().HashValues(hashId).ToList();
             if (list.Count > 0)
             {
                 list.ForEach(x =>
                 {
                     if (x.HasValue)
                     {
                         var str = x.ToString();
                         if (!string.IsNullOrWhiteSpace(str))
                         {
                             var t = SerializeHelper.Deserialize <T>(str);
                             if (t != null)
                             {
                                 result.Add(t);
                             }
                         }
                     }
                 });
             }
             return result;
         }
     }));
 }
예제 #9
0
        /// <summary>
        ///     获取全部的hashkey,hashvalue字典
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="hashId"></param>
        /// <returns></returns>
        public Dictionary <string, T> HashGetAllDic <T>(string hashId) where T : class, new()
        {
            return(DoWithRetry(() =>
            {
                using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
                {
                    var result = new Dictionary <string, T>();
                    var list = cnn.GetDatabase().HashGetAll(hashId).ToList();

                    if (list.Count > 0)
                    {
                        list.ForEach(x =>
                        {
                            var str = x.Value;
                            if (!string.IsNullOrWhiteSpace(str))
                            {
                                var value = SerializeHelper.Deserialize <T>(str);
                                result.Add(x.Name, value);
                            }
                        });
                    }
                    return result;
                }
            }));
        }
예제 #10
0
 /// <summary>
 ///     设置key
 /// </summary>
 /// <param name="key"></param>
 /// <param name="value"></param>
 /// <param name="expire">key的超时时常</param>
 /// <returns></returns>
 public bool StringSet(string key, string value, TimeSpan expire)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().StringSet(key, value, expire);
         }
     }));
 }
 /// <summary>
 ///     移除set
 /// </summary>
 /// <param name="setId"></param>
 /// <param name="val"></param>
 /// <returns></returns>
 public bool SetRemove(string setId, string val)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().SetRemove(setId, val);
         }
     }));
 }
 /// <summary>
 ///     返回指定set长度
 /// </summary>
 /// <param name="setId"></param>
 /// <returns></returns>
 public long SetLength(string setId)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().SetLength(setId);
         }
     }));
 }
예제 #13
0
 /// <summary>
 ///     移除某个score范围的SortedSet
 /// </summary>
 /// <param name="setId"></param>
 /// <param name="minValue"></param>
 /// <param name="maxValue"></param>
 /// <returns></returns>
 public long RemoveByScoreFromSortedSet(string setId, double minValue, double maxValue)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().SortedSetRemoveRangeByScore(setId, minValue, maxValue);
         }
     }));
 }
예제 #14
0
 /// <summary>
 ///     获取队列长度
 /// </summary>
 /// <param name="listId"></param>
 /// <returns></returns>
 public long QueueCount(string listId)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().ListLength(listId);
         }
     }));
 }
예제 #15
0
 public void StringGetKeys(Action <List <string> > callback, string patten = "*", int size = 1000)
 {
     DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             cnn.Keys(callback, patten, size);
         }
     });
 }
예제 #16
0
 /// <summary>
 ///     获取hash数量
 /// </summary>
 /// <param name="hashId"></param>
 /// <returns></returns>
 public long GetHashCount(string hashId)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().HashLength(hashId);
         }
     }));
 }
예제 #17
0
 /// <summary>
 ///     获取hash
 /// </summary>
 /// <param name="hashId"></param>
 /// <param name="key"></param>
 /// <returns></returns>
 public string HashGet(string hashId, string key)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().HashGet(hashId, key).ToString();
         }
     }));
 }
예제 #18
0
 /// <summary>
 ///     hash计数器
 /// </summary>
 /// <param name="hashId"></param>
 /// <param name="key"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 public long HashIncrement(string hashId, string key, long value = 1)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().HashIncrement(hashId, key, value);
         }
     }));
 }
예제 #19
0
 /// <summary>
 ///  设置一个值,仅在不存在的时候设置
 /// </summary>
 /// <param name="key"></param>
 /// <param name="value"></param>
 /// <param name="ts">超时时间</param>
 /// <returns></returns>
 public bool StringSetIfNotExists(string key, string value, TimeSpan ts)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().StringSet(key, value, ts, when: When.NotExists);
         }
     }));
 }
예제 #20
0
 /// <summary>
 ///     设置key
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="key"></param>
 /// <param name="t"></param>
 /// <param name="timeout"></param>
 /// <returns></returns>
 public bool StringSet <T>(string key, T t, int timeout = 0) where T : class, new()
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return StringSet(key, SerializeHelper.Serialize(t), timeout);
         }
     }));
 }
예제 #21
0
 public List <string> StringGetKeys(string patten = "*")
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.Keys(patten);
         }
     }));
 }
예제 #22
0
 /// <summary>
 ///     进队
 /// </summary>
 /// <param name="listId"></param>
 /// <param name="value"></param>
 public void Enqueue(string listId, string value)
 {
     DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             cnn.GetDatabase().ListLeftPush(listId, value);
         }
     });
 }
예제 #23
0
 /// <summary>
 ///     获取key
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public string StringGet(string key)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().StringGet(key);
         }
     }));
 }
예제 #24
0
 /// <summary>
 ///     移除key
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public bool KeyDelete(string key)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().KeyDelete(key);
         }
     }));
 }
예제 #25
0
 /// <summary>
 ///     key计数器(减去相应的value)
 /// </summary>
 /// <param name="key"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 public double StringDecrement(string key, double value)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().StringDecrement(key, value);
         }
     }));
 }
예제 #26
0
 /// <summary>
 ///     添加SortedSet
 /// </summary>
 /// <param name="setId"></param>
 /// <param name="item"></param>
 /// <param name="score"></param>
 /// <param name="timeout"></param>
 /// <returns></returns>
 public bool SortedSetAdd(string setId, string item, double score)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().SortedSetAdd(setId, item, score);
         }
     }));
 }
예제 #27
0
 /// <summary>
 ///     重命名key
 /// </summary>
 /// <param name="oldKey"></param>
 /// <param name="newKey"></param>
 /// <returns></returns>
 public bool KeyRename(string oldKey, string newKey)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().KeyRename(oldKey, newKey);
         }
     }));
 }
예제 #28
0
 /// <summary>
 ///     设置hash
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="hashId"></param>
 /// <param name="key"></param>
 /// <param name="t"></param>
 /// <returns></returns>
 public bool HashSet <T>(string hashId, string key, T t) where T : class, new()
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().HashSet(hashId, key, SerializeHelper.Serialize(t));
         }
     }));
 }
예제 #29
0
 /// <summary>
 ///     追加value
 /// </summary>
 /// <param name="key"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 public long StringAppend(string key, string value)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().StringAppend(value, value, CommandFlags.None);
         }
     }));
 }
예제 #30
0
 /// <summary>
 ///     设置hash
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="hashId"></param>
 /// <param name="key"></param>
 /// <param name="t"></param>
 /// <returns></returns>
 public bool HashSet(string hashId, string key, string val)
 {
     return(DoWithRetry(() =>
     {
         using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
         {
             return cnn.GetDatabase().HashSet(hashId, key, val);
         }
     }));
 }