|
@@ -11,770 +11,6 @@ using System.Text;
|
|
|
|
|
|
namespace OASystem.Infrastructure.Tools
|
|
|
{
|
|
|
- #region MyRegion
|
|
|
- //**************操作记录******************
|
|
|
- //内容描述:Redis帮助类
|
|
|
- //***************************************
|
|
|
- //public static class RedisHelper
|
|
|
- //{
|
|
|
-
|
|
|
- // private static string _strConn = "132.232.92.186:6379";
|
|
|
- // private static string _strPwd = "";
|
|
|
-
|
|
|
- // private static int _strDb = -1;
|
|
|
- // static ConnectionMultiplexer _redis;
|
|
|
- // static readonly object _locker = new object();
|
|
|
-
|
|
|
- // #region 单例模式
|
|
|
- // 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)
|
|
|
- // {
|
|
|
-
|
|
|
- // if (string.IsNullOrEmpty(connectionString))
|
|
|
- // {
|
|
|
- // connectionString = _strConn;
|
|
|
- // }
|
|
|
- // var options = ConfigurationOptions.Parse(connectionString);
|
|
|
- // options.Password = _strPwd;
|
|
|
- // return ConnectionMultiplexer.Connect(options);
|
|
|
- // }
|
|
|
- // #endregion
|
|
|
-
|
|
|
- // #region 辅助方法
|
|
|
- // /// <summary>
|
|
|
- // /// 对象序列化成字符串
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">泛型对象</typeparam>
|
|
|
- // /// <param name="value"></param>
|
|
|
- // /// <returns></returns>
|
|
|
- // private static string ConvertJson<T>(T value)
|
|
|
- // {
|
|
|
- // string result = value is string ? value.ToString() : JsonConvert.SerializeObject(value);
|
|
|
- // return result;
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// RedisValue序列化成对象
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">序列化后的对象</typeparam>
|
|
|
- // /// <param name="value">RedisValue</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // private static T ConvertObj<T>(RedisValue value)
|
|
|
- // {
|
|
|
- // if (value.IsNull)
|
|
|
- // {
|
|
|
- // return default(T);
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // return JsonConvert.DeserializeObject<T>(value);
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 多个值序列化成list集合
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">集合对象</typeparam>
|
|
|
- // /// <param name="values">RedisValue</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // private static List<T> ConvetList<T>(RedisValue[] values)
|
|
|
- // {
|
|
|
- // List<T> result = new List<T>();
|
|
|
- // foreach (var item in values)
|
|
|
- // {
|
|
|
- // var model = ConvertObj<T>(item);
|
|
|
- // if (model != null)
|
|
|
- // result.Add(model);
|
|
|
- // }
|
|
|
- // return result;
|
|
|
- // }
|
|
|
-
|
|
|
- // private static RedisKey[] ConvertRedisKeys(List<string> redisKeys, string prefix)
|
|
|
- // {
|
|
|
- // if (string.IsNullOrEmpty(prefix))
|
|
|
- // {
|
|
|
- // return redisKeys.Select(redisKey => (RedisKey)redisKey).ToArray();
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // return redisKeys.Select(redisKey => (RedisKey)(prefix + ":" + redisKey)).ToArray();
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 获取要操作的库
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="db">库,0和-1都是第一个库,1是第二个库...</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // private static int GetOperationDB(RedisEnum db)
|
|
|
- // {
|
|
|
- // if (db == RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // return _strDb;
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // return (int)db;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 获得枚举的Description
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="value">枚举值</param>
|
|
|
- // /// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
|
|
|
- // /// <returns>枚举的Description</returns>
|
|
|
- // private static string GetDescription(this Enum value, Boolean nameInstead = true)
|
|
|
- // {
|
|
|
- // Type type = value.GetType();
|
|
|
- // string name = Enum.GetName(type, value);
|
|
|
- // if (name == null)
|
|
|
- // {
|
|
|
- // return null;
|
|
|
- // }
|
|
|
-
|
|
|
- // FieldInfo field = type.GetField(name);
|
|
|
- // DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
|
|
|
-
|
|
|
- // if (attribute == null && nameInstead == true)
|
|
|
- // {
|
|
|
- // return name;
|
|
|
- // }
|
|
|
- // return attribute == null ? null : attribute.Description;
|
|
|
- // }
|
|
|
- // #endregion
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 是否存在
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // public static bool KeyExists(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // try
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).KeyExists(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key);
|
|
|
- // }
|
|
|
- // catch (Exception)
|
|
|
- // {
|
|
|
- // return false;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 设置过期时间
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="min">过期时间,单位:分钟</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // public static bool KeyExpire(string key, int min = 600, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // try
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).KeyExpire(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, DateTime.Now.AddMinutes(min));
|
|
|
- // }
|
|
|
- // catch (Exception)
|
|
|
- // {
|
|
|
- // return false;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 修改键
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="newKey">新键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static bool KeyRename(string key, string newKey, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // try
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).KeyRename(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, string.IsNullOrEmpty(strFd) ? newKey : strFd + ":" + newKey);
|
|
|
- // }
|
|
|
- // catch (Exception)
|
|
|
- // {
|
|
|
- // return false;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 清空
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static IEnumerable<RedisKey> AllClear(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // return Manager.GetServer(_strConn, _strPwd).Keys(GetOperationDB(db), key);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 删除
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static bool KeyDelete(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // try
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).KeyDelete(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key);
|
|
|
- // }
|
|
|
- // catch (Exception)
|
|
|
- // {
|
|
|
- // return false;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 批量删除
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="keys">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static long KeyDelete(List<string> keys, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // try
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).KeyDelete(ConvertRedisKeys(keys, strFd));
|
|
|
- // }
|
|
|
- // catch (Exception)
|
|
|
- // {
|
|
|
- // return 0;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 缓存单个字符串
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="value">值</param>
|
|
|
- // /// <param name="expireMinutes">过期时间,单位:分钟</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static bool StringSet(string key, string value, int expireMinutes = 600, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).StringSet(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, value, TimeSpan.FromMinutes(expireMinutes));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 批量缓存字符串
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="keysStr">键</param>
|
|
|
- // /// <param name="valuesStr">值</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static bool StringSet(string[] keysStr, string[] valuesStr, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // var vCount = keysStr.Length;
|
|
|
- // var vKeyValuePair = new KeyValuePair<RedisKey, RedisValue>[vCount];
|
|
|
- // for (int i = 0; i < vCount; i++)
|
|
|
- // {
|
|
|
- // vKeyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(string.IsNullOrEmpty(strFd) ? keysStr[i] : strFd + ":" + keysStr[i], valuesStr[i]);
|
|
|
- // }
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).StringSet(vKeyValuePair);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 缓存限时对象
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="obj">值</param>
|
|
|
- // /// <param name="expireMinutes">过期时间,单位:分钟</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static bool StringSet<T>(string key, T obj, int expireMinutes = 600, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).StringSet(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, JsonConvert.SerializeObject(obj), TimeSpan.FromMinutes(expireMinutes));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 缓存对象
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="obj">值</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static bool StringSet<T>(string key, T obj, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).StringSet(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, JsonConvert.SerializeObject(obj));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 根据key获取值
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static string StringGet(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).StringGet(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 批量根据key获取
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="keys">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static RedisValue[] StringGet(List<string> keys, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).StringGet(ConvertRedisKeys(keys, strFd));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 根据key获取单个对象
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static T StringGet<T>(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // string vValue = Manager.GetDatabase(GetOperationDB(db)).StringGet(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key);
|
|
|
- // return ConvertObj<T>(vValue);
|
|
|
- // }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 入栈(后插入的在List前面)
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="value">值</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // public static long ListLeftPush<T>(string key, T value, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).ListLeftPush(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, ConvertJson(value));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 批量入栈(后插入的在List前面)
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="values">值</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static long ListLeftPush<T>(string key, List<T> values, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // var vRedisValues = values.Select(m => (RedisValue)ConvertJson(m)).ToArray();
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).ListLeftPush(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, vRedisValues);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 出栈(删除最前面的一个元素并返回)
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static T ListLeftPop<T>(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // var vRedisValues = Manager.GetDatabase(GetOperationDB(db)).ListLeftPop(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key);
|
|
|
- // return ConvertObj<T>(vRedisValues);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 入队(后插入的在List后面)
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="value">值</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // public static long ListRightPush<T>(string key, T value, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).ListRightPush(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, ConvertJson(value));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 批量入队(后插入的在List后面)
|
|
|
- // /// </summary>
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="values">值</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static long ListRightPush<T>(string key, List<T> values, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // var vRedisValues = values.Select(m => (RedisValue)ConvertJson(m)).ToArray();
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).ListRightPush(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, vRedisValues);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 获取
|
|
|
- // /// <typeparam name="T">类型</typeparam>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="start">索引开始</param>
|
|
|
- // /// <param name="stop">索引结束</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static List<T> ListRange<T>(string key, long start = 0, long stop = -1, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // var vRedisValues = Manager.GetDatabase(GetOperationDB(db)).ListRange(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key, start, stop);
|
|
|
- // return ConvetList<T>(vRedisValues);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 获取个数
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="key">键</param>
|
|
|
- // /// <param name="folder">目录,默认根目录</param>
|
|
|
- // /// <param name="db">库,默认读取配置文件</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public static long ListLength(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.DB0)
|
|
|
- // {
|
|
|
- // string strFd = GetDescription(folder);
|
|
|
- // return Manager.GetDatabase(GetOperationDB(db)).ListLength(string.IsNullOrEmpty(strFd) ? key : strFd + ":" + key);
|
|
|
- // }
|
|
|
-
|
|
|
-
|
|
|
- //}
|
|
|
- #endregion
|
|
|
-
|
|
|
- #region MyRegion
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// Redis帮助类
|
|
|
- /// </summary>
|
|
|
- //public class RedisHelper : IDisposable
|
|
|
- //{
|
|
|
- // private static readonly object Locker = new object();
|
|
|
- // private static ConnectionMultiplexer redis = null;
|
|
|
- // private static bool connected = false;
|
|
|
- // private IDatabase db = null;
|
|
|
- // private static string _ip;
|
|
|
- // private static string _port;
|
|
|
- // private static string _pwd;
|
|
|
-
|
|
|
- // public bool IsConnected { get { GetRedisConnect(); return redis.IsConnected; } }
|
|
|
-
|
|
|
- // //public RedisHelper(string ip, string port, string pwd = "")
|
|
|
- // //{
|
|
|
- // // _ip = ip;
|
|
|
- // // _port = port;
|
|
|
- // // _pwd = pwd;
|
|
|
- // //}
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// Redis连接
|
|
|
- // /// </summary>
|
|
|
- // /// <returns></returns>
|
|
|
- // private int GetRedisConnect()
|
|
|
- // {
|
|
|
- // if (connected)
|
|
|
- // {
|
|
|
- // return 0;
|
|
|
- // }
|
|
|
- // lock (Locker)
|
|
|
- // {
|
|
|
- // if (redis == null || !redis.IsConnected)
|
|
|
- // {
|
|
|
- // redis = ConnectionMultiplexer.Connect($"{_ip}:{_port},password={_pwd},abortConnect = false");
|
|
|
- // }
|
|
|
- // }
|
|
|
- // connected = true;
|
|
|
- // return 0;
|
|
|
- // }
|
|
|
-
|
|
|
- // public void Using(Action<RedisHelper> action)
|
|
|
- // {
|
|
|
- // using (var redisHelper = new RedisHelper(_ip, _port, _pwd))
|
|
|
- // {
|
|
|
- // action(redisHelper);
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // public RedisHelper Use(int redisEnum)
|
|
|
- // {
|
|
|
- // db = redis.GetDatabase(redisEnum);
|
|
|
- // //Log.Logs($"RedisDB Conntet State: {redis.IsConnected}");
|
|
|
- // var t = db.Ping();
|
|
|
- // //Log.Logs($"RedisDB Select {i}, Ping.{t.TotalMilliseconds}ms");
|
|
|
- // return this;
|
|
|
- // }
|
|
|
-
|
|
|
- // public void Close(bool allowCommandsToComplete = true)
|
|
|
- // {
|
|
|
- // if (redis != null)
|
|
|
- // {
|
|
|
- // redis.Close(allowCommandsToComplete);
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // public void CloseAsync(bool allowCommandsToComplete = true)
|
|
|
- // {
|
|
|
- // if (redis != null)
|
|
|
- // {
|
|
|
- // redis.CloseAsync(allowCommandsToComplete);
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // public void Dispose()
|
|
|
- // {
|
|
|
- // db = null;
|
|
|
- // }
|
|
|
-
|
|
|
- // #region 发布订阅
|
|
|
-
|
|
|
- // public delegate void RedisDeletegate(string str);
|
|
|
- // public event RedisDeletegate RedisSubMessageEvent;
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 发布消息
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="channel"></param>
|
|
|
- // /// <param name="msg"></param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public long RedisPublish(string channel, string msg)
|
|
|
- // {
|
|
|
- // ISubscriber sub = redis.GetSubscriber();
|
|
|
- // return sub.Publish(channel, msg);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 订阅消息
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="subChannael"></param>
|
|
|
- // /// <param name=""></param>
|
|
|
- // public void RedisSubScribe(string subChannael)
|
|
|
- // {
|
|
|
- // ISubscriber sub = redis.GetSubscriber();
|
|
|
- // sub.Subscribe(subChannael, (channel, message) =>
|
|
|
- // {
|
|
|
- // RedisSubMessageEvent?.Invoke(message); //触发事件
|
|
|
- // });
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 取消订阅
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="channel"></param>
|
|
|
- // public void Unsubscribe(string channel)
|
|
|
- // {
|
|
|
- // ISubscriber sub = redis.GetSubscriber();
|
|
|
- // sub.Unsubscribe(channel);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 取消全部订阅
|
|
|
- // /// </summary>
|
|
|
- // public void UnsubscribeAll()
|
|
|
- // {
|
|
|
- // ISubscriber sub = redis.GetSubscriber();
|
|
|
- // sub.UnsubscribeAll();
|
|
|
- // }
|
|
|
-
|
|
|
- // #endregion
|
|
|
-
|
|
|
- // #region String类型操作
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 设置指定key 的值(默认第0个库)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <param name="strValue"></param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public bool InsertStr(string strKey, string strValue)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.StringSet(strKey, strValue);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 设置指定key 的值(指定库)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey"></param>
|
|
|
- // /// <param name="strValue"></param>
|
|
|
- // /// <param name="database"></param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public bool InsertStr(string strKey, string strValue, int database)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase(database);
|
|
|
- // return db.StringSet(strKey, strValue);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 设置指定key 的值(指定第一个库,指定过期时间)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <param name="strValue"></param>
|
|
|
- // /// <param name="expire"></param>
|
|
|
- // public bool InsertStrExpire(string strKey, string strValue, DateTime expire)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase(1);
|
|
|
- // db.StringSet(strKey, strValue);
|
|
|
- // return db.KeyExpire(strKey, expire);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 设置指定key 的值(指定第一个库,指定过期分钟数)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <param name="strValue"></param>
|
|
|
- // /// <param name="timespanmin"></param>
|
|
|
- // public bool InsertStrExpire(string strKey, string strValue, int timespanmin)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase(1);
|
|
|
- // return db.StringSet(strKey, strValue, TimeSpan.FromMinutes(timespanmin));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 设置指定key 的值(指定第一个库,指定过期分钟数)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <param name="strValue"></param>
|
|
|
- // /// <param name="timespanmin"></param>
|
|
|
- // public void InsertStrExpireByDatabaseOne(string strKey, string strValue, int timespanmin)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase(1);
|
|
|
- // db.StringSet(strKey, strValue, TimeSpan.FromMinutes(timespanmin));
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 获取指定 key 的值(默认第0个库)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public string ReadStr(string strKey)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.StringGet(strKey);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 获取指定 key 的值(指定第一个库)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public string ReadStrByDatabaseOne(string strKey)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase(1);
|
|
|
- // return db.StringGet(strKey);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 获取指定 key 的值(指定第一个库)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <param name="database"></param>
|
|
|
- // /// <returns></returns>
|
|
|
- // public string ReadStrByDatabase(string strKey, int database)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase(database);
|
|
|
- // return db.StringGet(strKey);
|
|
|
- // }
|
|
|
-
|
|
|
- // /// <summary>
|
|
|
- // /// 删除指定key的值(默认第0个库)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // public bool DeleteStr(string strKey)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.KeyDelete(strKey);
|
|
|
- // }
|
|
|
- // /// <summary>
|
|
|
- // /// 删除指定key的值(默认第0个库)
|
|
|
- // /// </summary>
|
|
|
- // /// <param name="strKey">指定key的值</param>
|
|
|
- // /// <param name="database">指定库的值</param>
|
|
|
- // public bool DeleteStrByDatabase(string strKey, int database)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase(database);
|
|
|
- // return db.KeyDelete(strKey);
|
|
|
- // }
|
|
|
- // public bool Exist(string strKey)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.KeyExists(strKey);
|
|
|
- // }
|
|
|
- // #endregion
|
|
|
-
|
|
|
- // #region Hash类型操作
|
|
|
- // public bool InsertHash(string tablename, string strKey, string strValue)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.HashSet(tablename, strKey, strValue);
|
|
|
- // }
|
|
|
- // public string ReadHash(string tablename, string strKey)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.HashGet(tablename, strKey);
|
|
|
- // }
|
|
|
- // public bool ExistHash(string tablename, string strKey)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.HashExists(tablename, strKey);
|
|
|
- // }
|
|
|
- // public bool DeleteHash(string tablename, string strKey)
|
|
|
- // {
|
|
|
- // var db = redis.GetDatabase();
|
|
|
- // return db.HashDelete(tablename, strKey);
|
|
|
- // }
|
|
|
- // #endregion
|
|
|
- //}
|
|
|
- #endregion
|
|
|
-
|
|
|
|
|
|
public class RedisHelper : IDisposable
|
|
|
{
|