|
- using StackExchange.Redis;
- using System;
- using System.Collections.Concurrent;
- using System.Configuration;
-
- namespace Learun.Cache.Redis
- {
- /// <summary>
- /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
- /// Copyright (c) 2013-2018 上海力软信息技术有限公司
- /// 创建人:力软-框架开发组
- /// 日 期:2018.11.05
- /// 描 述:redis 链接类
- /// </summary>
- public static class RedisConnectionHelp
- {
- //系统自定义Key前缀
- public static readonly string SysCustomKey = ConfigurationManager.AppSettings["RedisPrev"] ?? "";
-
- //"127.0.0.1:6379,allowadmin=true
- private static readonly string RedisConnectionString = ConfigurationManager.AppSettings["RedisExchangeHosts"] ?? "127.0.0.1:6379,allowadmin=true";
-
- private static readonly object Locker = new object();
- private static ConnectionMultiplexer _instance;
- private static readonly ConcurrentDictionary<string, ConnectionMultiplexer> ConnectionCache = new ConcurrentDictionary<string, ConnectionMultiplexer>();
-
- /// <summary>
- /// 单例获取
- /// </summary>
- public static ConnectionMultiplexer Instance
- {
- get
- {
- if (_instance == null)
- {
- lock (Locker)
- {
- if (_instance == null || !_instance.IsConnected)
- {
- _instance = GetManager();
- }
- }
- }
- return _instance;
- }
- }
-
- /// <summary>
- /// 缓存获取
- /// </summary>
- /// <param name="connectionString"></param>
- /// <returns></returns>
- 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;
- }
-
- #region 事件
-
- /// <summary>
- /// 配置更改时
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void MuxerConfigurationChanged(object sender, EndPointEventArgs e)
- {
- Console.WriteLine("Configuration changed: " + e.EndPoint);
- }
-
- /// <summary>
- /// 发生错误时
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void MuxerErrorMessage(object sender, RedisErrorEventArgs e)
- {
- Console.WriteLine("ErrorMessage: " + e.Message);
- }
-
- /// <summary>
- /// 重新建立连接之前的错误
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void MuxerConnectionRestored(object sender, ConnectionFailedEventArgs e)
- {
- Console.WriteLine("ConnectionRestored: " + e.EndPoint);
- }
-
- /// <summary>
- /// 连接失败 , 如果重新连接成功你将不会收到这个通知
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void MuxerConnectionFailed(object sender, ConnectionFailedEventArgs e)
- {
- Console.WriteLine("重新连接:Endpoint failed: " + e.EndPoint + ", " + e.FailureType + (e.Exception == null ? "" : (", " + e.Exception.Message)));
- }
-
- /// <summary>
- /// 更改集群
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void MuxerHashSlotMoved(object sender, HashSlotMovedEventArgs e)
- {
- Console.WriteLine("HashSlotMoved:NewEndPoint" + e.NewEndPoint + ", OldEndPoint" + e.OldEndPoint);
- }
-
- /// <summary>
- /// redis类库错误
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void MuxerInternalError(object sender, InternalErrorEventArgs e)
- {
- Console.WriteLine("InternalError:Message" + e.Exception.Message);
- }
-
- #endregion 事件
- }
- }
|