zoukankan      html  css  js  c++  java
  • Redis(二):c#连接Redis

    1、nuget StackExchange.Redis

    2、建立RedisHelper类:

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

    3、查看远程Redis端口是否开放:

    如果没有开放的话,请修改Redis的conf文件的bind:127.0.0.1 改为 bind 0.0.0.0

  • 相关阅读:
    【算法】哈希表法四部曲
    【算法】位运算技巧
    【算法】分治法四步走
    【算法】分支界限三步走
    【Java】位操作符
    【Java】String字符串格式化
    阿里一面,给了几条SQL,问需要执行几次树搜索操作?
    c++随机数问题研究
    Google单元测试框架gtest之官方sample笔记4--事件监控之内存泄漏测试
    Google单元测试框架gtest之官方sample笔记3--值参数化测试
  • 原文地址:https://www.cnblogs.com/25miao/p/9931925.html
Copyright © 2011-2022 走看看