RedisHelper.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. 
  2. using Newtonsoft.Json;
  3. using StackExchange.Redis;
  4. using System;
  5. using System.Collections.Concurrent;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Linq;
  9. using System.Reflection;
  10. using System.Text;
  11. namespace OASystem.Infrastructure.Tools
  12. {
  13. public class RedisHelper : IDisposable
  14. {
  15. //连接字符串
  16. private string _connectionString;
  17. //实例名称
  18. private string _instanceName;
  19. //默认数据库
  20. private int _defaultDB;
  21. private ConcurrentDictionary<string, ConnectionMultiplexer> _connections;
  22. public RedisHelper(string connectionString, string instanceName, int defaultDB = 0)
  23. {
  24. _connectionString = connectionString;
  25. _instanceName = instanceName;
  26. _defaultDB = defaultDB;
  27. _connections = new ConcurrentDictionary<string, ConnectionMultiplexer>();
  28. }
  29. /// <summary>
  30. /// 获取ConnectionMultiplexer
  31. /// </summary>
  32. /// <returns></returns>
  33. private ConnectionMultiplexer GetConnect()
  34. {
  35. return _connections.GetOrAdd(_instanceName, p => ConnectionMultiplexer.Connect(_connectionString));
  36. }
  37. /// <summary>
  38. /// 获取数据库
  39. /// </summary>
  40. /// <param name="configName"></param>
  41. /// <param name="db">默认为0:优先代码的db配置,其次config中的配置</param>
  42. /// <returns></returns>
  43. public IDatabase GetDatabase(RedisEnum redisEnum)
  44. {
  45. return GetConnect().GetDatabase((int)redisEnum);
  46. }
  47. public IServer GetServer(string configName = null, int endPointsIndex = 0)
  48. {
  49. var confOption = ConfigurationOptions.Parse(_connectionString);
  50. return GetConnect().GetServer(confOption.EndPoints[endPointsIndex]);
  51. }
  52. public ISubscriber GetSubscriber(string configName = null)
  53. {
  54. return GetConnect().GetSubscriber();
  55. }
  56. public void Dispose()
  57. {
  58. if (_connections != null && _connections.Count > 0)
  59. {
  60. foreach (var item in _connections.Values)
  61. {
  62. item.Close();
  63. }
  64. }
  65. }
  66. }
  67. }