using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using StackExchange.Redis; namespace ProjectBase.Data.Redis { public class RedisConnection { // 系统自定义Key前缀 public static readonly string SysCustomKey = ConfigurationManager.AppSettings["redisKey"] ?? ""; // "127.0.0.1:6379,allowadmin=true private static readonly string RedisConnectionString = ConfigurationManager.ConnectionStrings["RedisExchangeHosts"].ConnectionString; private static readonly object Locker = new object(); private static ConnectionMultiplexer _instance; private static readonly ConcurrentDictionary ConnectionCache = new ConcurrentDictionary(); /// /// 单例获取 /// public static ConnectionMultiplexer Instance { get { if (_instance == null) { lock (Locker) { if (_instance == null || !_instance.IsConnected) { _instance = GetManager(); } } } return _instance; } } /// /// 缓存获取 /// /// /// public static ConnectionMultiplexer GetConnectionMultiplexer(string connectionString) { if (!ConnectionCache.ContainsKey(connectionString)) { ConnectionCache[connectionString] = GetManager(connectionString); } return ConnectionCache[connectionString]; } private static ConnectionMultiplexer GetManager(string connectionString = null) { connectionString = connectionString ?? RedisConnectionString; var connect = ConnectionMultiplexer.Connect(connectionString); //注册如下事件 //connect.ConnectionFailed += MuxerConnectionFailed; //connect.ConnectionRestored += MuxerConnectionRestored; //connect.ErrorMessage += MuxerErrorMessage; //connect.ConfigurationChanged += MuxerConfigurationChanged; //connect.HashSlotMoved += MuxerHashSlotMoved; //connect.InternalError += MuxerInternalError; return connect; } } }