RedisConnection.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Newtonsoft.Json;
  9. using StackExchange.Redis;
  10. namespace ProjectBase.Data.Redis
  11. {
  12. public class RedisConnection
  13. {
  14. // 系统自定义Key前缀
  15. public static readonly string SysCustomKey = ConfigurationManager.AppSettings["redisKey"] ?? "";
  16. // "127.0.0.1:6379,allowadmin=true
  17. private static readonly string RedisConnectionString = ConfigurationManager.ConnectionStrings["RedisExchangeHosts"].ConnectionString;
  18. private static readonly object Locker = new object();
  19. private static ConnectionMultiplexer _instance;
  20. private static readonly ConcurrentDictionary<string, ConnectionMultiplexer> ConnectionCache = new ConcurrentDictionary<string, ConnectionMultiplexer>();
  21. /// <summary>
  22. /// 单例获取
  23. /// </summary>
  24. public static ConnectionMultiplexer Instance
  25. {
  26. get
  27. {
  28. if (_instance == null)
  29. {
  30. lock (Locker)
  31. {
  32. if (_instance == null || !_instance.IsConnected)
  33. {
  34. _instance = GetManager();
  35. }
  36. }
  37. }
  38. return _instance;
  39. }
  40. }
  41. /// <summary>
  42. /// 缓存获取
  43. /// </summary>
  44. /// <param name="connectionString"></param>
  45. /// <returns></returns>
  46. public static ConnectionMultiplexer GetConnectionMultiplexer(string connectionString)
  47. {
  48. if (!ConnectionCache.ContainsKey(connectionString))
  49. {
  50. ConnectionCache[connectionString] = GetManager(connectionString);
  51. }
  52. return ConnectionCache[connectionString];
  53. }
  54. private static ConnectionMultiplexer GetManager(string connectionString = null)
  55. {
  56. connectionString = connectionString ?? RedisConnectionString;
  57. var connect = ConnectionMultiplexer.Connect(connectionString);
  58. //注册如下事件
  59. //connect.ConnectionFailed += MuxerConnectionFailed;
  60. //connect.ConnectionRestored += MuxerConnectionRestored;
  61. //connect.ErrorMessage += MuxerErrorMessage;
  62. //connect.ConfigurationChanged += MuxerConfigurationChanged;
  63. //connect.HashSlotMoved += MuxerHashSlotMoved;
  64. //connect.InternalError += MuxerInternalError;
  65. return connect;
  66. }
  67. }
  68. }