最近一直在忙公司的一下项目,也没有太多时间写,所以就分享出所用redis帮助类
using Newtonsoft.Json;using StackExchange.Redis;using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Reflection;using System.Text;using ZsqApp.Core.Infrastructure.Extentions;using ZsqApp.Core.Infrastructure.SysEnum;namespace ZsqApp.Core.Infrastructure.Utilities{ //**************操作记录****************** //内容描述:Redis帮助类 //*************************************** public static class RedisHelper { private static string _strConn = "地址"; 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 (StringExtension.IsBlank(connectionString)) { connectionString = _strConn; } var options = ConfigurationOptions.Parse(connectionString); options.Password = _strPwd; return ConnectionMultiplexer.Connect(options); } #endregion #region 辅助方法 ////// 对象序列化成字符串 /// ///泛型对象 /// ///private static string ConvertJson (T value) { string result = value is string ? value.ToString() : JsonConvert.SerializeObject(value); return result; } /// /// RedisValue序列化成对象 /// ///序列化后的对象 /// RedisValue ///private static T ConvertObj (RedisValue value) { if (StringExtension.IsBlank(value)) { return default(T); } else { return JsonConvert.DeserializeObject (value); } } /// /// 多个值序列化成list集合 /// ///集合对象 /// RedisValue ///private static List ConvetList (RedisValue[] values) { List result = new List (); foreach (var item in values) { var model = ConvertObj (item); if (model != null) result.Add(model); } return result; } private static RedisKey[] ConvertRedisKeys(List redisKeys, string prefix) { if (StringExtension.IsBlank(prefix)) { return redisKeys.Select(redisKey => (RedisKey)redisKey).ToArray(); } else { return redisKeys.Select(redisKey => (RedisKey)(prefix + ":" + redisKey)).ToArray(); } } /// /// 获取要操作的库 /// /// 库,0和-1都是第一个库,1是第二个库... ///private static int GetOperationDB(RedisEnum db) { if (db == RedisEnum.Default) { return _strDb; } else { return (int)db; } } /// /// 获得枚举的Description /// /// 枚举值 /// 当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用 ///枚举的Description 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 ////// 是否存在 /// /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 public static bool KeyExists(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { try { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).KeyExists(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key); } catch (Exception) { return false; } } ////// 设置过期时间 /// /// 键 /// 过期时间,单位:分钟 /// 目录,默认根目录 /// 库,默认读取配置文件 public static bool KeyExpire(string key, int min = 600, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { try { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).KeyExpire(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, DateTime.Now.AddMinutes(min)); } catch (Exception) { return false; } } ////// 修改键 /// /// 键 /// 新键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static bool KeyRename(string key, string newKey, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { try { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).KeyRename(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, StringExtension.IsBlank(strFd) ? newKey : strFd + ":" + newKey); } catch (Exception) { return false; } } /// /// 清空 /// /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static IEnumerable AllClear(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { return Manager.GetServer(_strConn, _strPwd).Keys(GetOperationDB(db), key); } /// /// 删除 /// /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static bool KeyDelete(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { try { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).KeyDelete(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key); } catch (Exception) { return false; } } /// /// 批量删除 /// /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static long KeyDelete(List keys, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { try { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).KeyDelete(ConvertRedisKeys(keys, strFd)); } catch (Exception) { return 0; } } /// /// 缓存单个字符串 /// /// 键 /// 值 /// 过期时间,单位:分钟 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static bool StringSet(string key, string value, int expireMinutes = 600, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).StringSet(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, value, TimeSpan.FromMinutes(expireMinutes)); } /// /// 批量缓存字符串 /// /// 键 /// 值 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static bool StringSet(string[] keysStr, string[] valuesStr, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); var vCount = keysStr.Length; var vKeyValuePair = new KeyValuePair [vCount]; for (int i = 0; i < vCount; i++) { vKeyValuePair[i] = new KeyValuePair (StringExtension.IsBlank(strFd) ? keysStr[i] : strFd + ":" + keysStr[i], valuesStr[i]); } return Manager.GetDatabase(GetOperationDB(db)).StringSet(vKeyValuePair); } /// /// 缓存限时对象 /// ///类型 /// 键 /// 值 /// 过期时间,单位:分钟 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static bool StringSet (string key, T obj, int expireMinutes = 600, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).StringSet(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, JsonHelper.SerializeObject(obj), TimeSpan.FromMinutes(expireMinutes)); } /// /// 缓存对象 /// ///类型 /// 键 /// 值 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static bool StringSet (string key, T obj, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).StringSet(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, JsonHelper.SerializeObject(obj)); } /// /// 根据key获取值 /// /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static string StringGet(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).StringGet(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key); } /// /// 批量根据key获取 /// /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static RedisValue[] StringGet(List keys, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).StringGet(ConvertRedisKeys(keys, strFd)); } /// /// 根据key获取单个对象 /// ///类型 /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static T StringGet (string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); string vValue = Manager.GetDatabase(GetOperationDB(db)).StringGet(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key); return ConvertObj (vValue); } /// /// 入栈(后插入的在List前面) /// ///类型 /// 键 /// 值 /// 目录,默认根目录 /// 库,默认读取配置文件 public static long ListLeftPush(string key, T value, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).ListLeftPush(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, ConvertJson(value)); } /// /// 批量入栈(后插入的在List前面) /// ///类型 /// 键 /// 值 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static long ListLeftPush (string key, List values, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); var vRedisValues = values.Select(m => (RedisValue)ConvertJson(m)).ToArray(); return Manager.GetDatabase(GetOperationDB(db)).ListLeftPush(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, vRedisValues); } /// /// 出栈(删除最前面的一个元素并返回) /// ///类型 /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static T ListLeftPop (string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); var vRedisValues = Manager.GetDatabase(GetOperationDB(db)).ListLeftPop(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key); return ConvertObj (vRedisValues); } /// /// 入队(后插入的在List后面) /// ///类型 /// 键 /// 值 /// 目录,默认根目录 /// 库,默认读取配置文件 public static long ListRightPush(string key, T value, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).ListRightPush(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, ConvertJson(value)); } /// /// 批量入队(后插入的在List后面) /// ///类型 /// 键 /// 值 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static long ListRightPush (string key, List values, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); var vRedisValues = values.Select(m => (RedisValue)ConvertJson(m)).ToArray(); return Manager.GetDatabase(GetOperationDB(db)).ListRightPush(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, vRedisValues); } /// /// 获取 /// 类型 /// 键 /// 索引开始 /// 索引结束 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static List ListRange (string key, long start = 0, long stop = -1, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); var vRedisValues = Manager.GetDatabase(GetOperationDB(db)).ListRange(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key, start, stop); return ConvetList (vRedisValues); } /// /// 获取个数 /// /// 键 /// 目录,默认根目录 /// 库,默认读取配置文件 ///public static long ListLength(string key, RedisFolderEnum folder = RedisFolderEnum.Root, RedisEnum db = RedisEnum.Default) { string strFd = GetDescription(folder); return Manager.GetDatabase(GetOperationDB(db)).ListLength(StringExtension.IsBlank(strFd) ? key : strFd + ":" + key); } }}