C# redis测试

using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Configuration;
using System.Text;

namespace ClassLibrary2
{
    public class RedisHelper
    {
        //public static readonly string connectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;
        
        public static readonly string connectionString = "localhost:6379,allowadmin=true,password=123,keepAlive=180";

        private readonly object _lock = new object();

        private volatile IConnectionMultiplexer _connection;

        public IDatabase _db;

        public RedisHelper()
        {
            _connection = ConnectionMultiplexer.Connect(connectionString);
            _db = GetDatabase();
        }

        /// <summary>
        /// 获取数据库
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        public IDatabase GetDatabase(int? db = null)
        {
            return GetConnection().GetDatabase(db ?? -1);
        }

        /// <summary>
        /// 获取连接
        /// </summary>
        /// <returns></returns>
        public IConnectionMultiplexer GetConnection()
        {
            if (_connection != null && _connection.IsConnected)
            {
                return _connection;
            }
            lock (_lock) 
            {
                if (_connection != null && _connection.IsConnected)
                {
                    return _connection;
                }
                else
                {
                     _connection.Dispose();
                }
                _connection = ConnectionMultiplexer.Connect(connectionString);
            }
            return _connection;
        }

        /// <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 enpiresIn = TimeSpan.FromMinutes(cacheTime);

            _db.StringSet(key, entryBytes, enpiresIn);
        }

        /// <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="data"></param>
        /// <returns></returns>
        public byte[] Serialize(object data)
        {
            var json = JsonConvert.SerializeObject(data);
            return Encoding.UTF8.GetBytes(json);
        }       
    }
}

猜你喜欢

转载自www.cnblogs.com/qlgbk/p/12599966.html