using System; using System.Configuration; using StackExchange.Redis; namespace Redis { public sealed class RedisDbContext { /// <summary> /// Redis连接器 /// </summary> private static Lazy<ConnectionMultiplexer> _lazyConnection; /// <summary> /// Redis单例. /// </summary> /// <returns></returns> public static IDatabase Instance() { return Instance(null); } /// <summary> /// Redis单例. /// </summary> /// <param name="connectionString">Redis服务器连接地址.</param> /// <returns></returns> public static IDatabase Instance(string connectionString) { return Instance(connectionString, 0); } /// <summary> /// Redis单例. /// </summary> /// <param name="connectionString">Redis服务器连接地址.</param> /// <param name="db">Redis服务器数据库索引(0-10).</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">Redis服务器单例过程失败</exception> public static IDatabase Instance(string connectionString, int db) { if (_lazyConnection == null) { lock (typeof(RedisDbContext)) { if (_lazyConnection == null) { if (string.IsNullOrWhiteSpace(connectionString)) { InitRedis(); } else { InitRedis(connectionString); } } } } if (_lazyConnection == null) { throw new Exception("Redis服务器连接失败"); } return _lazyConnection.Value.GetDatabase(db); } /// <summary> /// 初始化Redis连接器. /// </summary> private static void InitRedis() { InitRedis(ConfigurationManager.AppSettings["RedisConnection"]); } /// <summary> /// 初始化Redis连接器. /// </summary> /// <param name="connectionString">Redis服务器连接地址.</param> /// <exception cref="System.ArgumentNullException">Redis服务器连接地址ConnectionString未配置</exception> private static void InitRedis(string connectionString) { if (string.IsNullOrEmpty(connectionString)) { throw new ArgumentNullException("Redis服务器地址未配置"); } _lazyConnection = new Lazy<ConnectionMultiplexer>( () => ConnectionMultiplexer.Connect(new ConfigurationOptions() { AbortOnConnectFail = false, EndPoints = { connectionString } })); } } }