.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;//readonly

        private static int Database = 0;//readonly
        private static ConnectionMultiplexer _redis;
        private static object Locker = new object();//readonly

        private 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);//例:0
                Conn = 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)}");
            }
        }

        #endregion

        public 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 Keys
        public 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值