/// <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>(); } })); }
/// <summary> /// Ping /// </summary> /// <returns></returns> public TimeSpan Ping() { return(DoWithRetry(() => { return _cnn.GetDatabase().Ping(); })); }
/// <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; } })); }
/// <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; } })); }
/// <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; } })); }
/// <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; } })); }
/// <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; } })); }
/// <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; } })); }
/// <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; } })); }
/// <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); } })); }
/// <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); } })); }
/// <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); } })); }
/// <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); } })); }
/// <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); } })); }
/// <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); } })); }
/// <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); } })); }
/// <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(); } })); }
/// <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); } })); }
/// <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); } }); }
/// <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); } })); }
/// <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); } })); }
/// <summary> /// 获取某个SortedSet的score值 /// </summary> /// <param name="setId"></param> /// <param name="item"></param> /// <returns></returns> public double?GetItemScoreFromSortedSet(string setId, string item) { return(DoWithRetry(() => { using (var cnn = new SERedisConnection(_sectionName, _dbIndex)) { return cnn.GetDatabase().SortedSetScore(setId, item); } })); }
/// <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); } })); }
/// <summary> /// 移除某个序号范围的SortedSet /// </summary> /// <param name="setId"></param> /// <param name="fromRank"></param> /// <param name="toRank"></param> /// <returns></returns> public long RemoveByRankFromSortedSet(string setId, long fromRank, long toRank) { return(DoWithRetry(() => { using (var cnn = new SERedisConnection(_sectionName, _dbIndex)) { return cnn.GetDatabase().SortedSetRemoveRangeByRank(setId, fromRank, toRank); } })); }
/// <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); } })); }
/// <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)); } })); }
/// <summary> /// 称除SortedSet /// </summary> /// <param name="setId"></param> /// <param name="item"></param> /// <returns></returns> public bool RemoveItemFromSortedSet(string setId, string item) { return(DoWithRetry(() => { using (var cnn = new SERedisConnection(_sectionName, _dbIndex)) { return cnn.GetDatabase().SortedSetRemove(setId, item); } })); }
/// <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); } })); }