/// <summary> /// 获取指定key的List /// </summary> /// <param name="key"></param> /// <param name="count"></param> /// <returns></returns> public List <T> ListRange <T>(string key, long count = 1000) { List <T> list = new List <T>(); Enumerable.ToList <string>(CsRedisHelper.LRang(key, 0, count)).ForEach(p => { list.Add(ConvertObj <T>(p)); }); return(list); }
/// <summary> /// 查找所有符合给定模式( pattern)的 key /// </summary> /// <param name="pattern">如:runoob*,不含prefix前辍RedisHelper.Name</param> /// <returns></returns> public List <string> Keys(string pattern) { var keys = new List <string>(); CsRedisHelper.Keys(_prefix + pattern).ToList().ForEach(p => { keys.Add(p.Substring(_prefix.Length)); }); return(keys); }
/// <summary> /// /// </summary> public RedisCacheService(RedisConfig redisConfig, ICollection <IJsonProvider> jsonProviders) { _jsonProvider = InjectionSelectionCommon.GetImplement(jsonProviders); ValidationCommon.Check(redisConfig, "redis配置异常", HttpStatus.Err.Name); new RedisConfigValidator().Validate(redisConfig).Check(); _prefix = redisConfig.Name; CsRedisHelper.InitializeConfiguration(redisConfig); }
/// <summary> /// 存储数据到hash表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="dataKey"></param> /// <param name="t"></param> /// <param name="second">秒</param> /// <returns></returns> public bool HashSet <T>(string key, string dataKey, T t, long second = -1) { string value = CsRedisHelper.HashSet(key, GetExpire(second), dataKey, ConvertJson <T>(t)); bool result = string.Equals(value, "OK", StringComparison.OrdinalIgnoreCase); return(result); }
/// <summary> /// 添加 (当score一样value一样时不插入) /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="score"></param> /// <param name="isOverlap"></param> /// <returns></returns> public bool SortedSetAdd <T>(string key, T value, double score, bool isOverlap = false) { if (isOverlap) { SortedSetRemove <T>(key, value); } return(CsRedisHelper.ZAdd(key, (score, ConvertJson <T>(value))) > 0); }
/// <summary> /// 存储数据到hash表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="kvalues"></param> /// <param name="second">秒</param> /// <returns></returns> public bool HashSet <T>(string key, Dictionary <string, T> kvalues, long second = -1) { List <object> keyValues = new List <object>(); foreach (var kvp in kvalues) { keyValues.Add(kvp.Key); keyValues.Add(ConvertJson <T>(kvp.Value)); } return(string.Equals(CsRedisHelper.HashSet(key, GetExpire(second), keyValues.ToArray()), "OK", StringComparison.OrdinalIgnoreCase)); }
/// <summary> /// 获取已过期的hashKey /// </summary> /// <param name="count"></param> /// <returns></returns> public Dictionary <string, string> SortedSetRangeByRankAndOverTime(long count = 1000) { var keyList = CsRedisHelper .ZRevRangeByScore(_overtimeCacheKey, TimeCommon.GetTimeSpan(DateTime.Now), 0, count, null) .ToList <string>(); //得到过期的key集合 Dictionary <string, string> hasKey = new Dictionary <string, string>(); keyList.ForEach(item => { var keys = item.Replace("~_~", "!").Split('!'); if (!hasKey.ContainsKey(keys[0])) { hasKey.Add(keys[0], keys[1]); } }); return(hasKey); }
/// <summary> /// 从hash表获取数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="dataKeys"></param> /// <returns></returns> public Dictionary <string, string> HashGet(string key, List <string> dataKeys) { if (dataKeys != null && dataKeys.Count > 0) { dataKeys = dataKeys.Distinct().ToList(); var values = CsRedisHelper.HashGet(key, dataKeys.ToArray()).ToList(); Dictionary <string, string> dic = new Dictionary <string, string>(); for (int i = 0; i < dataKeys.Count; i++) { if (!dic.ContainsKey(dataKeys[i]) && values[i] != null) { dic.Add(dataKeys[i], values[i]); } } return(dic); } else { return(CsRedisHelper.HashGetAll(key)); } }
/// <summary> /// 获取单个key的值 /// </summary> /// <param name="key">Redis Key</param> /// <returns></returns> public string StringGet(string key) { return(CsRedisHelper.Get(key)); }
/// <summary> /// 删除 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public async Task <bool> SortedSetRemoveAsync <T>(string key, T value) { return(await CsRedisHelper.ZRemAsync(key, new string[1] { ConvertJson <T>(value) }) > 0); }
/// <summary> /// 获取全部 /// </summary> /// <param name="key"></param> /// <param name="count"></param> /// <returns></returns> public async Task <List <T> > SortedSetRangeByRankAsync <T>(string key, long count = 1000) { return(ConvertListObj <T>(Enumerable.ToList <string>((await CsRedisHelper.ZRangeAsync(key, 0, count))))); }
/// <summary> /// 获取集合中的数量 /// </summary> /// <param name="key"></param> /// <returns></returns> public long SortedSetLength(string key) { return(CsRedisHelper.ZCard(key)); }
/// <summary> /// 添加 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="score"></param> /// <returns></returns> public async Task <bool> SortedSetAddAsync <T>(string key, T value, double score) { return(await CsRedisHelper.ZAddAsync(key, (score, ConvertJson <T>(value))) > 0); }
/// <summary> /// 移除指定ListId的内部List的值 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public async Task <long> ListRemoveAsync <T>(string key, T value) { return(await CsRedisHelper.LRemAsync(key, int.MaxValue, ConvertJson <T>(value))); }
/// <summary> /// 判断是否存在项 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool SortedSetExistItem <T>(string key, T value) { return(CsRedisHelper.ZScore(key, ConvertJson <T>(value)).HasValue); }
/// <summary> /// 删除指定Key的缓存 /// 用于在 key 存在时删除 key /// </summary> /// <param name="keys">待删除的Key集合,不含prefix前辍RedisHelper.Name</param> /// <returns>返回删除的数量</returns> public long Remove(params string[] keys) { return(CsRedisHelper.Remove(keys)); }
/// <summary> /// 设置指定key过期时间 /// </summary> /// <param name="key">不含prefix前辍RedisHelper.Name</param> /// <param name="expire">过期时间</param> /// <returns></returns> public bool Expire(string key, TimeSpan expire) { return(CsRedisHelper.Expire(key, expire)); }
/// <summary> /// 获取集合中的数量 /// </summary> /// <param name="key"></param> /// <returns></returns> public long ListLength(string key) { return(CsRedisHelper.LLen(key)); }
/// <summary> /// 删除 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool SortedSetRemove <T>(string key, T value) { return(CsRedisHelper.ZRem(key, new string[1] { ConvertJson <T>(value) }) > 0); }
/// <summary> /// 获取集合中的数量 /// </summary> /// <param name="key"></param> /// <returns></returns> public async Task <long> ListLengthAsync(string key) { return(await CsRedisHelper.LLenAsync(key)); }
/// <summary> /// 出栈 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public async Task <T> ListLeftPopAsync <T>(string key) { return(ConvertObj <T>(await CsRedisHelper.LPopAsync(key))); }
/// <summary> /// 入栈 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public async Task <long> ListLeftPushAsync <T>(string key, T value) { return(await CsRedisHelper.LPushAsync(key, new string[1] { ConvertJson <T>(value) })); }
/// <summary> /// 获取集合中的数量 /// </summary> /// <param name="key"></param> /// <returns></returns> public async Task <long> SortedSetLengthAsync(string key) { return(await CsRedisHelper.ZCardAsync(key)); }
/// <summary> /// 出栈 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public T ListLeftPop <T>(string key) { return(ConvertObj <T>(CsRedisHelper.LPop(key))); }
/// <summary> /// 删除指定Key的缓存 /// 用于在 key 存在时删除 key /// </summary> /// <param name="keys">待删除的Key集合,不含prefix前辍RedisHelper.Name</param> /// <returns>返回删除的数量</returns> public long Remove(List <string> keys) { return(CsRedisHelper.Remove(keys?.ToArray())); }
/// <summary> /// 保存单个key value /// </summary> /// <param name="key">Redis Key</param> /// <param name="value">保存的值</param> /// <param name="expiry">过期时间</param> /// <returns></returns> public bool StringSet(string key, string value, TimeSpan?expiry = default(TimeSpan?)) { return(CsRedisHelper.Set(key, value, expiry.HasValue ? Convert.ToInt32(expiry.Value.TotalSeconds) : -1)); }
/// <summary> /// 检查给定 key 是否存在 /// </summary> /// <param name="key">不含prefix前辍RedisHelper.Name</param> /// <returns></returns> public bool Exist(string key) { return(CsRedisHelper.Exists(key)); }
/// <summary> /// 保存一个对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="obj"></param> /// <param name="expiry"></param> /// <returns></returns> public bool StringSet <T>(string key, T obj, TimeSpan?expiry = default(TimeSpan?)) { return(CsRedisHelper.Set(key, ConvertJson(obj), expiry.HasValue ? Convert.ToInt32(expiry.Value.TotalSeconds) : -1)); }
/// <summary> /// 获取全部 /// </summary> /// <param name="key"></param> /// <param name="count"></param> /// <returns></returns> public List <T> SortedSetRangeByRank <T>(string key, long count = 1000) { return(ConvertListObj <T>(CsRedisHelper.ZRange(key, 0, count).ToList <string>())); }
/// <summary> /// 获取指定索引的集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="fromRank"></param> /// <param name="toRank"></param> /// <returns></returns> public List <T> GetRangeFromSortedSet <T>(string key, long fromRank, long toRank) { return(ConvertListObj <T>(Enumerable.ToList <string>(CsRedisHelper.ZRange(key, fromRank, toRank)))); }