c#--Redis帮助类
发布日期:2021-08-13 19:50:49 浏览次数:2 分类:技术文章

本文共 12046 字,大约阅读时间需要 40 分钟。

最近一直在忙公司的一下项目,也没有太多时间写,所以就分享出所用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); } }}

  

转载于:https://www.cnblogs.com/wuyabaibsd/p/10341028.html

转载地址:https://blog.csdn.net/weixin_30699235/article/details/99158931 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:WEB 前端插件整理
下一篇:创建新用户

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月03日 09时01分30秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章