• C# Redis的操作


    Nuget添加StackExchange.Redis的引用

    由于Redis封装类同时使用了Json,需要添加JSON.NET引用(Newtonsoft.Json)

    Redis封装类

    /// <summary>
        /// Redis 操作类
        /// </summary>
        public class RedisHelper
        {
            /// <summary>
            /// 连接字符串
            /// </summary>
            private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;
            /// <summary>
            ////// </summary>
            private readonly object _lock = new object();
            /// <summary>
            /// 连接对象
            /// </summary>
            private volatile IConnectionMultiplexer _connection;
            /// <summary>
            /// 数据库
            /// </summary>
            private IDatabase _db;
            public RedisHelper()
            {
                _connection = ConnectionMultiplexer.Connect(ConnectionString);
                _db = GetDatabase();
            }
            /// <summary>
            /// 获取连接
            /// </summary>
            /// <returns></returns>
            protected IConnectionMultiplexer GetConnection()
            {
                if (_connection != null && _connection.IsConnected)
                {
                    return _connection;
                }
                lock (_lock)
                {
                    if (_connection != null && _connection.IsConnected)
                    {
                        return _connection;
                    }
    
                    if (_connection != null)
                    {
                        _connection.Dispose();
                    }
                    _connection = ConnectionMultiplexer.Connect(ConnectionString);
                }
    
                return _connection;
            }
            /// <summary>
            /// 获取数据库
            /// </summary>
            /// <param name="db"></param>
            /// <returns></returns>
            public IDatabase GetDatabase(int? db = null)
            {
                return GetConnection().GetDatabase(db ?? -1);
            }
            /// <summary>
            /// 设置
            /// </summary>
            /// <param name="key"></param>
            /// <param name="data"></param>
            /// <param name="cacheTime">时间</param>
            public virtual void Set(string key, object data, int cacheTime)
            {
                if (data == null)
                {
                    return;
                }
                var entryBytes = Serialize(data);
                var expiresIn = TimeSpan.FromMinutes(cacheTime);
    
                _db.StringSet(key, entryBytes, expiresIn);
            }
            /// <summary>
            /// 根据键获取值
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key"></param>
            /// <returns></returns>
            public virtual T Get<T>(string key)
            {
    
                var rValue = _db.StringGet(key);
                if (!rValue.HasValue)
                {
                    return default(T);
                }
    
                var result = Deserialize<T>(rValue);
    
                return result;
            }
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="serializedObject"></param>
            /// <returns></returns>
            protected virtual T Deserialize<T>(byte[] serializedObject)
            {
                if (serializedObject == null)
                {
                    return default(T);
                }
                var json = Encoding.UTF8.GetString(serializedObject);
                return JsonConvert.DeserializeObject<T>(json);
            }
            /// <summary>
            /// 判断是否已经设置
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public virtual bool IsSet(string key)
            {
                return _db.KeyExists(key);
            }
            /// <summary>
            /// 序列化
            /// </summary>
            /// <param name="data"></param>
            /// <returns>byte[]</returns>
            private byte[] Serialize(object data)
            {
                var json = JsonConvert.SerializeObject(data);
                return Encoding.UTF8.GetBytes(json);
            }
        }
    View Code

    控制台测试代码

    var s = "a";
    new RedisHelper().Set("abc", s, 10);
    Console.WriteLine("ok");
    Console.ReadKey();

    运行,查看数据库

     

    获取值:

    //var s = "a";
    
    Console.WriteLine(new RedisHelper().Get<string>("abc"));
    //Console.WriteLine("ok");
    Console.ReadKey();

  • 相关阅读:
    Uboot命令使用
    git删除某次提交
    chrome随意改变主题
    C++11——处理日期和时间的chrono库
    C++11——多线程异步操作
    C++11——原子变量
    C++11——C++线程同步之条件变量
    C++11——C++线程同步之互斥锁
    C++11——call_once
    C++11——命名空间
  • 原文地址:https://www.cnblogs.com/godbell/p/7476529.html
Copyright © 2020-2023  润新知