RedisCacheHelper

mac2024-09-27  58

public class RedisCacheHelper { 默认缓存过期时间单位秒 public static int secondsTimeOut = 30 * 60; // 数据库 public static long InitialDb; // 地址 public static string Url; private static PooledRedisClientManager _instance = null; private static object _locker = new Object(); /// <summary> /// Redis连接池管理 /// </summary> public static PooledRedisClientManager Instance { get { if (_instance == null) { lock (_locker) { if (_instance == null) { InitialDb = 8; Url = "127.0.0.1"; _instance = new PooledRedisClientManager(InitialDb, new string[] { Url }); } } } return _instance; } } static RedisCacheHelper() { } /// <summary> /// 连接Redis /// </summary> /// <returns></returns> public static RedisClient GetClient() { return (RedisClient)Instance.GetClient(); } #region Key/Value读取和存储 /// <summary> /// 添加新缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="t"></param> /// <param name="timeout"></param> /// <returns></returns> public static bool Add<T>(string key, T t, int timeout) { using (var redisClient = RedisCacheHelper.GetClient()) { if (timeout > 0) { secondsTimeOut = timeout; } return redisClient.Add<T>(key, t, DateTime.Now.AddHours(secondsTimeOut)); } } /// <summary> /// 添加新缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="t"></param> /// <param name="timeSpan"></param> /// <returns></returns> public static bool Add<T>(string key, T t, TimeSpan timeSpan) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.Add<T>(key, t, timeSpan); } } /// <summary> /// 设置缓存 用于修改 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key">缓存建</param> /// <param name="t">缓存值</param> /// <param name="timeout">过期时间,单位秒,-1:不过期,0:默认过期时间</param> /// <returns></returns> public static bool Set<T>(string key, T t, int timeout = 0) { using (var redisClient = RedisCacheHelper.GetClient()) { if (timeout > 0) { secondsTimeOut = timeout; } return redisClient.Set<T>(key, t, DateTime.Now.AddHours(secondsTimeOut)); } } /// <summary> /// 设置缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="t"></param> /// <param name="timeSpan"></param> /// <returns></returns> public static bool Set<T>(string key, T t, TimeSpan timeSpan) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.Set<T>(key, t, timeSpan); } } /// <summary> /// 获取 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public static T Get<T>(string key) { if (!string.IsNullOrWhiteSpace(key)) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.Get<T>(key); } } return default(T); } #endregion #region 链表操作 /// <summary> /// 获取链表数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="listId"></param> /// <returns></returns> public static IEnumerable<T> GetList<T>(string listId) { using (var redisClient = RedisCacheHelper.GetClient()) { IRedisTypedClient<T> iredisClient = redisClient.As<T>(); return iredisClient.Lists[listId]; } } /// <summary> /// IEnumerable数据添加到链表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="listId"></param> /// <param name="values"></param> /// <param name="timeout"></param> public static void AddList<T>(string listId, IEnumerable<T> values, int timeout = 0) { using (var redisClient = RedisCacheHelper.GetClient()) { redisClient.Expire(listId, 60); IRedisTypedClient<T> iredisClient = redisClient.As<T>(); if (timeout >= 0) { if (timeout > 0) { secondsTimeOut = timeout; } redisClient.Expire(listId, secondsTimeOut); } var redisList = iredisClient.Lists[listId]; redisList.AddRange(values); iredisClient.Save(); } } /// <summary> /// 添加单个实体到链表中 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="listId"></param> /// <param name="item"></param> /// <param name="timeout"></param> public static void AddEntityToList<T>(string listId, T item, int timeout = 0) { using (var redisClient = RedisCacheHelper.GetClient()) { IRedisTypedClient<T> iredisClient = redisClient.As<T>(); if (timeout >= 0) { if (timeout > 0) { secondsTimeOut = timeout; } redisClient.Expire(listId, secondsTimeOut); } var redisList = iredisClient.Lists[listId]; redisList.Add(item); iredisClient.Save(); } } /// <summary> /// 在链表中删除单个实体 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="listId"></param> /// <param name="t"></param> public static void RemoveEntityFromList<T>(string listId, T t) { using (var redisClient = RedisCacheHelper.GetClient()) { IRedisTypedClient<T> iredisClient = redisClient.As<T>(); var redisList = iredisClient.Lists[listId]; redisList.RemoveValue(t); iredisClient.Save(); } } /// <summary> /// 根据lambada表达式删除符合条件的实体 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="listId"></param> /// <param name="func"></param> public static void RemoveEntityFromList<T>(string listId, Func<T, bool> func) { using (IRedisTypedClient<T> iredisClient = RedisCacheHelper.GetClient().As<T>()) { var redisList = iredisClient.Lists[listId]; T value = redisList.Where(func).FirstOrDefault(); redisList.RemoveValue(value); iredisClient.Save(); } } #endregion #region get操作 /// <summary> /// 根据key值获取value /// </summary> /// <param name="key"></param> /// <returns></returns> public static string GetValue(string key) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetValue(key); } } /// <summary> /// 获得hash型key某个字段的值 /// </summary> /// <param name="key"></param> /// <param name="field"></param> public static string GetValueFromHash(string hashId, string key) { using (var redisClient = RedisCacheHelper.GetClient()) { string value = redisClient.GetValueFromHash(hashId, key); return value; } } /// <summary> /// 判断hash中是否存在某个key /// </summary> /// <param name="hashId"></param> /// <param name="key"></param> /// <returns></returns> public static bool HashContainsEntry(string hashId, string key) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.HashContainsEntry(hashId, key); } } /// <summary> /// 判断某个key是否存在 /// </summary> /// <param name="key"></param> /// <returns></returns> public static bool ContainsKey(string key) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.ContainsKey(key); } } /// <summary> /// 判断一个Key是否存在Set中 /// </summary> /// <param name="setId"></param> /// <param name="value"></param> /// <returns></returns> public static bool SortedSetContainsItem(string setId, string value) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.SortedSetContainsItem(setId, value); } } /// <summary> /// 获取hash的数量 /// </summary> /// <param name="hashId"></param> /// <returns></returns> public static long GetHashCount(string hashId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetHashCount(hashId); } } /// <summary> /// 获取set的数量 /// </summary> /// <param name="setId"></param> /// <returns></returns> public static long GetSetCount(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetSetCount(setId); } } /// <summary> /// 获取某一个值在set的下标 /// </summary> /// <param name="setId"></param> /// <param name="value"></param> /// <returns></returns> public static long GetItemIndexInSortedSet(string setId, string value) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetItemIndexInSortedSet(setId, value); } } /// <summary> /// 获取SortSet数量 /// </summary> /// <param name="setId"></param> /// <returns></returns> public static long GetSortedSetCount(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetSortedSetCount(setId); } } /// <summary> /// 获取Set里的所有数据 /// </summary> /// <param name="setId"></param> /// <returns></returns> public static HashSet<string> GetAllItemsFromSet(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetAllItemsFromSet(setId); } } /// <summary> /// 获取SortedSet的所有项,按分数倒序 /// </summary> /// <param name="setId"></param> /// <returns></returns> public static List<string> GetAllItemsFromSortedSetDesc(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetAllItemsFromSortedSetDesc(setId); } } /// <summary> /// 获取SortedSet的所有项 /// </summary> /// <param name="setId"></param> /// <returns></returns> public static List<string> GetAllItemsFromSortedSet(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetAllItemsFromSortedSet(setId); } } /// <summary> /// 获取SortedSet的分数 /// </summary> /// <param name="setId"></param> /// <param name="value"></param> /// <returns></returns> public static double? GetItemScoreInSortedSet(string setId, string value) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetItemScoreInSortedSet(setId, value); } } /// <summary> /// 获取SortedSet的值和分数 /// </summary> /// <param name="setId"></param> /// <returns></returns> public static IDictionary<string, double> GetAllWithScoresFromSortedSet(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetAllWithScoresFromSortedSet(setId); } } /// <summary> /// 搜key /// </summary> /// <param name="pattern"></param> /// <returns></returns> public static List<string> SearchKeys(string pattern) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.SearchKeys(pattern); } } #endregion #region Set操作 /// <summary> /// 设置hash型key某个字段的值 /// </summary> /// <param name="key"></param> /// <param name="field"></param> /// <param name="value"></param> public static void SetHashField(string hashId, string key, string value) { using (var redisClient = RedisCacheHelper.GetClient()) { redisClient.SetEntryInHash(hashId, key, value); } } /// <summary> /// 插入内容到SortedSet /// </summary> /// <param name="setId"></param> /// <param name="value">值</param> /// <param name="score">分数</param> /// <returns></returns> public static bool AddItemToSortedSet(string setId, string value, double score) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.AddItemToSortedSet(setId, value, score); } } /// <summary> /// 插入内容到SortedSet /// </summary> /// <param name="setId"></param> /// <param name="value">值</param> /// <returns></returns> public static bool AddItemToSortedSet(string setId, string value) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.AddItemToSortedSet(setId, value); } } /// <summary> /// 往Set里写内容 /// </summary> /// <param name="setId"></param> /// <param name="item"></param> public static void AddItemToSet(string setId, string item) { using (var redisClient = RedisCacheHelper.GetClient()) { redisClient.AddItemToSet(setId, item); } } /// <summary> /// 从SortedSet中取出分数最低的一条记录 /// </summary> /// <param name="client"></param> /// <param name="setId"></param> /// <returns></returns> public static string PopItemWithLowestScoreFromSortedSet(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.PopItemWithLowestScoreFromSortedSet(setId); } } /// <summary> /// 从SortedSet中取出分数最高的一条记录 /// </summary> /// <param name="setId"></param> /// <returns></returns> public static string PopItemWithHighestScoreFromSortedSet(string setId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.PopItemWithHighestScoreFromSortedSet(setId); } } /// <summary> /// 设置字符串缓存 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void SetEntry(string key, string value) { using (var redisClient = RedisCacheHelper.GetClient()) { redisClient.SetEntry(key, value); } } /// <summary> /// 设置字符串缓存 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="timeSpan">过期时间</param> public static void SetEntry(string key, string value, TimeSpan timeSpan) { using (var redisClient = RedisCacheHelper.GetClient()) { redisClient.SetEntry(key, value, timeSpan); } } #endregion #region REMOVE 移除相关命令 /// <summary> /// 删除 /// </summary> /// <param name="key"></param> /// <returns></returns> public static bool Remove(string key) { if (!string.IsNullOrWhiteSpace(key)) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.Remove(key); } } return false; } /// <summary> /// 移除Sorted /// <param name="setId"></param> /// <param name="value"></param> /// <returns></returns> public static bool RemoveItemFromSortedSet(string setId, string value) { if (!string.IsNullOrWhiteSpace(setId) && !string.IsNullOrWhiteSpace(value)) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.RemoveItemFromSortedSet(setId, value); } } return false; } /// <summary> /// 移除hash中的key /// </summary> /// <param name="hashId"></param> /// <param name="key"></param> /// <returns></returns> public static bool RemoveEntryFromHash(string hashId, string key) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.RemoveEntryFromHash(hashId, key); } } /// <summary> /// 从Set中移除值 /// </summary> /// <param name="client"></param> /// <param name="setId"></param> /// <param name="item"></param> public static void RemoveItemFromSet(string setId, string item) { using (var redisClient = RedisCacheHelper.GetClient()) { redisClient.RemoveItemFromSet(setId, item); } } #endregion #region 判断 /// <summary> /// 设置某个Key过期 /// </summary> /// <param name="key"></param> /// <param name="expireAt"></param> /// <returns></returns> public static bool ExpireEntryAt(string key, DateTime expireAt) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.ExpireEntryAt(key, expireAt); } } /// <summary> /// 设置某个Key过期 /// </summary> /// <param name="key">jian</param> /// <param name="expireAt"></param> /// <returns></returns> public static bool ExpireEntryIn(string key, TimeSpan timeSpan) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.ExpireEntryIn(key, timeSpan); } } #endregion #region hash /// <summary> /// 获取hash表的key集合 /// </summary> /// <param name="hashId"></param> /// <returns></returns> public static List<string> GetHashKeys(string hashId) { using (var redisClient = RedisCacheHelper.GetClient()) { return redisClient.GetHashKeys(hashId); } } /// <summary> /// 获得某个hash型key下的所有值 /// </summary> /// <param name="hashId"></param> /// <returns></returns> public static List<string> GetHashValues(string hashId) { using (var redisClient = RedisCacheHelper.GetClient()) { List<string> hashValues = redisClient.GetHashValues(hashId); return hashValues; } } /// <summary> ///使某个字段增加 /// </summary> /// <param name="key"></param> /// <param name="field"></param> /// <param name="incre"></param> /// <returns></returns> public static void SetHashIncr(string key, string field, int incre) { using (var redisClient = RedisCacheHelper.GetClient()) { redisClient.IncrementValueInHash(key, field, incre); } } #endregion #region 重命名 /// <summary> /// 重命名 /// </summary> /// <param name="fromName">之前的名称</param> /// <param name="toName">修改后的名称</param> public static void RenameKey(string fromName, string toName) { using (var redisClient = GetClient()) { redisClient.RenameKey(fromName, toName); } } #endregion #region 清空redis /// <summary> /// /// </summary> /// <param name="noDeleteKeys">不删的keys</param> public static void FlushRedisdb(List<string> noDeleteKeys = null) { using (var redisClient = GetClient()) { var keys = redisClient.GetAllKeys(); foreach (string key in keys) { if (noDeleteKeys != null && noDeleteKeys.Count > 0 && noDeleteKeys.Contains(key)) { //不删 } else { //删 redisClient.Remove(key); } } } } #endregion #region 按照规则删除redis历史数据 /// <summary> /// 按照规则删除redis历史数据 /// </summary> /// <param name="foucsday">当日</param> /// <param name="IsReserveYesterday">是否要保留当日的昨天数据</param> /// <param name="hashId">指定的hashid</param> public static void ClearRedisHis(DateTime foucsday, bool IsReserveYesterday = false, string hashId = "") { string reserveToday = foucsday.ToString("yyyyMMdd"); string reserveYesterday = foucsday.AddDays(-1).ToString("yyyyMMdd"); using (var redisClient = GetClient()) { #region if (!string.IsNullOrWhiteSpace(hashId)) { //按hash删 List<string> keys = redisClient.GetHashKeys(hashId); foreach (var t_key in keys) { if (t_key.Length < 8) { continue;//单号长度太短 } if (IsReserveYesterday) { if (t_key.IndexOf(reserveToday) < 0//不是今天 && t_key.IndexOf(reserveYesterday) < 0//也不是昨天 ) { //移除 redisClient.RemoveEntryFromHash(hashId, t_key); } } else { if (t_key.IndexOf(reserveToday) < 0//不是今天 ) { //移除 redisClient.RemoveEntryFromHash(hashId, t_key); } } } } else { //按key删除 List<string> keys = redisClient.SearchKeys("*"); foreach (var t_key in keys) { if (t_key.Length < 8) { continue;//单号长度太短 } if (IsReserveYesterday) { if (t_key.IndexOf(reserveToday) < 0//不是今天 && t_key.IndexOf(reserveYesterday) < 0//也不是昨天 ) { //移除 redisClient.Remove(t_key); } } else { if (t_key.IndexOf(reserveToday) < 0//不是今天 ) { //移除 redisClient.Remove(t_key); } } } } #endregion } } #endregion } ~~~
最新回复(0)