您的位置:首页 > 新闻 > 热点要闻 > .net RedisHelper

.net RedisHelper

2024/10/6 3:56:12 来源:https://blog.csdn.net/djk8888/article/details/141059662  浏览:    关键词:.net RedisHelper

 NuGet安装: StackExchange.Redis


 Appsettings.json 设置:

{

        "RedisIP": "192.168.1.123:4567",
        "RedisDB": "0", //Redis数据库编号

}


using Newtonsoft.Json;
using StackExchange.Redis;
using System.Configuration;namespace TempAndRhCtrl
{/// <summary>/// Redis帮助类/// config里添加设置:///     //Redis连接字符串:///     "RedisIP": "192.168.1.123:4567",///     "RedisDB": "0", //Redis数据库编号/// </summary>public class RedisHelper{private static string Connstr;//readonlyprivate static int Database = 0;//readonlyprivate static ConnectionMultiplexer _redis;private static object Locker = new object();//readonlyprivate static ConnectionMultiplexer Conn;private static IDatabase Db;public static string RedisIP = Tools.ToString(CustomConfigManager.GetConfig("RedisIP"), "");//Redis连接字符串public static string RedisDB = Tools.ToString(CustomConfigManager.GetConfig("RedisDB"), "0");//Redis数据库编号#region 初始化static RedisHelper(){try{Connstr = RedisIP;//例:192.168.1.123:4567 Database = Convert.ToInt32(RedisDB);//例:0Conn = ConnectionMultiplexer.Connect(Connstr);Db = Conn == null ? null : Conn.GetDatabase(Database);//Db = Conn == null ? null : Conn.GetDatabase(0);}catch (Exception ex){throw new Exception($"Redis连接失败,IP:{Connstr},错误码 : {GetLineNum(ex)}");}}#endregionpublic static string GetAppsettingStr(string str){AppSettingsReader appReader = new AppSettingsReader();return appReader.GetValue(str, typeof(string)).ToString();}public static ConnectionMultiplexer Manager{get{if (_redis == null){lock (Locker){if (_redis != null) return _redis;_redis = GetManager();return _redis;}}return _redis;}}private static ConnectionMultiplexer GetManager(string connectionString = null){try{if (string.IsNullOrEmpty(connectionString)){connectionString = Connstr;}var options = ConfigurationOptions.Parse(connectionString);options.ConnectTimeout = 20000;//连接操作超时(ms)options.KeepAlive = 180;//发送消息以帮助保持套接字活动的时间(秒)(默认为60秒)options.SyncTimeout = 2000;//时间(ms)允许进行同步操作options.ConnectRetry = 3;//重试连接的次数return ConnectionMultiplexer.Connect(options);}catch (Exception){return null;}}#region String 可以设置过期时间/// <summary>/// 保存单个key value/// </summary>/// <param name="key">Redis Key</param>/// <param name="value">保存的值</param>/// <param name="expiry">过期时间</param>/// <returns></returns>public static bool SetStringKey(string key, string value, TimeSpan? expiry = default(TimeSpan?)){try{var db = Manager.GetDatabase(Database);return db.StringSet(key, value, expiry);}catch (Exception){return false;}}/// <summary>/// 保存多个key value/// </summary>/// <param name="arr">key</param>/// <returns></returns>public static bool SetStringKey(KeyValuePair<RedisKey, RedisValue>[] arr){try{var db = Manager.GetDatabase(Database);return db.StringSet(arr);}catch (Exception){return false;}}/// <summary>/// 保存一个对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="obj"></param>/// <param name="expiry"></param>/// <returns></returns>public static bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?)){try{string json = JsonConvert.SerializeObject(obj);var db = Manager.GetDatabase(Database);return db.StringSet(key, json, expiry);}catch (Exception){return false;}}/// <summary>/// 获取单个key的值/// </summary>/// <param name="key">Redis Key</param>/// <returns></returns>public static RedisValue GetStringKey(string key){var db = Manager.GetDatabase(Database);return db.StringGet(key);}/// <summary>/// 获取多个Key/// </summary>/// <param name="listKey">Redis Key集合</param>/// <returns></returns>public static RedisValue[] GetStringKey(List<RedisKey> listKey){var db = Manager.GetDatabase(Database);return db.StringGet(listKey.ToArray());}/// <summary>/// 获取一个key的对象/// </summary>/// <param name="key"></param>/// <returns></returns>public static string GetObjectKey(string key){try{var db = Manager.GetDatabase(Database);return db.StringGet(key).ToString();}catch (Exception){return "";}}/// <summary>/// 获取一个key的对象/// </summary>/// <param name="key"></param>/// <returns></returns>public static string GetObjectKey<T>(string key){try{var db = Manager.GetDatabase(Database);if ((db.StringGet(key) == RedisValue.Null)){return "";}else{var redisKey = db.StringGet(key);return JsonConvert.DeserializeObject<T>(redisKey.ToString()).ToString();}}catch (Exception){return "";}}#endregion#region Hash/// <summary>/// 保存一个集合/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key">Redis Key</param>/// <param name="list">数据集合</param>/// <param name="getModelId"></param>public static void HashSet<T>(string key, List<T> list, Func<T, string> getModelId){List<HashEntry> listHashEntry = new List<HashEntry>();foreach (var item in list){string json = JsonConvert.SerializeObject(item);listHashEntry.Add(new HashEntry(getModelId(item), json));}var db = Manager.GetDatabase(Database);db.HashSet(key, listHashEntry.ToArray());}/// <summary>/// 获取Hash中的单个key的值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key">Redis Key</param>/// <param name="hasFildValue">RedisValue</param>/// <returns></returns>public static T GetHashKey<T>(string key, string hasFildValue){if (!string.IsNullOrWhiteSpace(key) && !string.IsNullOrWhiteSpace(hasFildValue)){var db = Manager.GetDatabase(Database);RedisValue value = db.HashGet(key, hasFildValue);if (!value.IsNullOrEmpty){return JsonConvert.DeserializeObject<T>(value);}}return default(T);}/// <summary>/// 获取hash中的多个key的值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key">Redis Key</param>/// <param name="listhashFields">RedisValue value</param>/// <returns></returns>public static List<T> GetHashKey<T>(string key, List<RedisValue> listhashFields){List<T> result = new List<T>();if (!string.IsNullOrWhiteSpace(key) && listhashFields.Count > 0){var db = Manager.GetDatabase(Database);RedisValue[] value = db.HashGet(key, listhashFields.ToArray());foreach (var item in value){if (!item.IsNullOrEmpty){result.Add(JsonConvert.DeserializeObject<T>(item));}}}return result;}/// <summary>/// 获取hashkey所有Redis key/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <returns></returns>public static List<T> GetHashAll<T>(string key){var db = Manager.GetDatabase(Database);List<T> result = new List<T>();RedisValue[] arr = db.HashKeys(key);foreach (var item in arr){if (!item.IsNullOrEmpty){result.Add(JsonConvert.DeserializeObject<T>(item));}}return result;}/// <summary>/// 获取hashkey所有的值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <returns></returns>public static List<T> HashGetAll<T>(string key){var db = Manager.GetDatabase(Database);List<T> result = new List<T>();HashEntry[] arr = db.HashGetAll(key);foreach (var item in arr){if (!item.Value.IsNullOrEmpty){result.Add(JsonConvert.DeserializeObject<T>(item.Value));}}return result;}/// <summary>/// 删除hasekey/// </summary>/// <param name="key"></param>/// <param name="hashField"></param>/// <returns></returns>public static bool DeleteHase(RedisKey key, RedisValue hashField){var db = Manager.GetDatabase(Database);return db.HashDelete(key, hashField);}#endregion#region key/// <summary>/// 删除单个key/// </summary>/// <param name="key">redis key</param>/// <returns>是否删除成功</returns>public static bool KeyDelete(string key){var db = Manager.GetDatabase(Database);return db.KeyDelete(key);}/// <summary>/// 删除多个key/// </summary>/// <param name="keys">rediskey</param>/// <returns>成功删除的个数</returns>public static long KeyDelete(RedisKey[] keys){var db = Manager.GetDatabase(Database);return db.KeyDelete(keys);}/// <summary>/// 判断key是否存储/// </summary>/// <param name="key">redis key</param>/// <returns></returns>public static bool KeyExists(string key){var db = Manager.GetDatabase(Database);return db.KeyExists(key);}/// <summary>/// 重新命名key/// </summary>/// <param name="key">就的redis key</param>/// <param name="newKey">新的redis key</param>/// <returns></returns>public static bool KeyRename(string key, string newKey){var db = Manager.GetDatabase(Database);return db.KeyRename(key, newKey);}#endregion#region Search Keyspublic static List<string> SearchKeys(string key){List<string> list = null;for (int i = 1; i <= 5; i++){bool bFlag = KeyExists(key + "_" + i);string value = RedisHelper.GetObjectKey(key + "_" + i);if (!string.IsNullOrEmpty(value)){if (list == null)list = new List<string>();list.Add(value);}}return list;}#endregion#region List操作/// <summary>/// 删除指定List<T>中满足条件的元素/// </summary>/// <param name="listkey">Key</param>/// <param name="func">lamdba表达式</param>/// <param name="db_index">数据库序号,不传默认为0</param>/// <returns></returns>public static bool delListByLambda<T>(string listkey, Func<T, bool> func, int db_index = 0){var db = Manager.GetDatabase(db_index);if (db.KeyExists(listkey)){var value = db.StringGet(listkey);if (!string.IsNullOrEmpty(value)){var list = JsonConvert.DeserializeObject<List<T>>(value);if (list.Count > 0){list = list.SkipWhile<T>(func).ToList();value = JsonConvert.SerializeObject(list);return db.StringSet(listkey, value);}else{return false;}}else{return false;}}else{return false;}}/// <summary>/// 获取指定List<T>中满足条件的元素/// </summary>/// <param name="listkey">Key</param>/// <param name="func">lamdba表达式</param>/// <param name="db_index">数据库序号,不传默认为0</param>/// <returns></returns>public static List<T> getListByLambda<T>(string listkey, Func<T, bool> func, int db_index = 0){var db = Manager.GetDatabase(db_index);if (db.KeyExists(listkey)){var value = db.StringGet(listkey);if (!string.IsNullOrEmpty(value)){var list = JsonConvert.DeserializeObject<List<T>>(value);if (list.Count > 0){list = list.Where(func).ToList();return list;}else{return new List<T>();}}else{return new List<T>();}}else{return new List<T>();}}#endregion#region 行数异常/// <summary>/// 获取出现异常的行数/// </summary>/// <param name="ex"></param>/// <returns></returns>public static int GetLineNum(Exception ex){var str = ex.StackTrace.Substring(ex.StackTrace.IndexOf("line"), ex.StackTrace.Length - ex.StackTrace.IndexOf("line"));string result = System.Text.RegularExpressions.Regex.Replace(str, @"[^0-9]+", "");return Convert.ToInt32(result);}#endregion }
}

调用:

var OverLimitList =RedisHelper.GetObjectKey("OverLimitList");//获取Redis字符串

bool b = RedisHelper.SetStringKey("OverLimitList", OverLimitList);//更新Redis

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com