zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    复制代码

    控制台测试代码

    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();

     https://www.cnblogs.com/godbell/p/7476529.html

  • 相关阅读:
    Objective-C 排序
    Objective-C 工厂方法
    Objective-C 关键字:retain, assgin, copy, readonly,atomic,nonatomic
    iOS UINavigationController的使用
    iOS UITabBarController的使用
    iOS UISearchController的使用
    iOS中延时执行的几种方式的比较和汇总
    iOS适配 旧项目工程在iOS9下不能正常显示
    iOS Block界面反向传值
    iOS Block简介
  • 原文地址:https://www.cnblogs.com/sjqq/p/9001237.html
Copyright © 2011-2022 走看看