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

  • 相关阅读:
    关于 OpenSmtp 邮件标题过长后出现乱码问题的解决
    用于解析 sohu 新闻页面的 XSLT 文件
    CEGUI 0.7x实现下划线描边图文混排等效果
    Hash算法说明
    D3DXMatrixShadow 函数
    DLL动态链接库和LIB静态链接库之程序员经验分析
    printf格式控制符的完整格式(转载)
    深入说明HDR技术
    Irrlicht不定期分析
    8.3实例程序:平面阴影
  • 原文地址:https://www.cnblogs.com/25miao/p/9931925.html
Copyright © 2011-2022 走看看