protected RedLockFactory CreateRedisLockFactory() { //get password and value whether to use ssl from connection string var password = string.Empty; var useSsl = false; foreach (var option in GetConnectionString().Split(',').Where(option => option.Contains('='))) { switch (option.Substring(0, option.IndexOf('=')).Trim().ToLowerInvariant()) { case "password": password = option.Substring(option.IndexOf('=') + 1).Trim(); break; case "ssl": bool.TryParse(option.Substring(option.IndexOf('=') + 1).Trim(), out useSsl); break; } } List <RedLockEndPoint> l = GetEndPoints().Select(endPoint => new RedLockEndPoint { EndPoint = endPoint, Password = password, Ssl = useSsl }).ToList(); RedLockConfiguration r = new RedLockConfiguration(l); //create RedisLockFactory for using Redlock distributed lock algorithm return(new RedLockFactory(r)); }
/// <summary> /// Create a RedLockFactory using the specified configuration /// </summary> public RedLockFactory(RedLockConfiguration configuration) { this.configuration = configuration ?? throw new ArgumentNullException(nameof(configuration), "Configuration must not be null"); this.loggerFactory = configuration.LoggerFactory ?? new LoggerFactory(); this.redisCaches = configuration.ConnectionProvider.CreateRedisConnections(); SubscribeToConnectionEvents(); }
/// <summary> /// Create a RedLockFactory using a list of RedLockEndPoints (ConnectionMultiplexers will be internally managed by RedLock.net) /// </summary> public static RedLockFactory Create(IList <RedLockEndPoint> endPoints, ILoggerFactory loggerFactory = null, RedLockRetryConfiguration retryConfiguration = null) { var configuration = new RedLockConfiguration(endPoints, loggerFactory) { RetryConfiguration = retryConfiguration }; return(new RedLockFactory(configuration)); }
/// <summary> /// Create a RedLockFactory using existing StackExchange.Redis ConnectionMultiplexers /// </summary> public static RedLockFactory Create(IList <RedLockMultiplexer> existingMultiplexers) { var configuration = new RedLockConfiguration( new ExistingMultiplexersRedLockConnectionProvider { Multiplexers = existingMultiplexers }); return(new RedLockFactory(configuration)); }
/// <summary> /// Create a RedLockFactory using existing StackExchange.Redis ConnectionMultiplexers /// </summary> public static RedLockFactory Create(IList <RedLockMultiplexer> existingMultiplexers, ILoggerFactory loggerFactory = null, RedLockRetryConfiguration retryConfiguration = null) { var configuration = new RedLockConfiguration( new ExistingMultiplexersRedLockConnectionProvider { Multiplexers = existingMultiplexers }, loggerFactory) { RetryConfiguration = retryConfiguration }; return(new RedLockFactory(configuration)); }
/// <summary> /// Выполнить регистрацию и валидацию конфигураций. /// </summary> /// <param name="config">Валидация конфигураций.</param> /// <param name="services">Коллекция служб.</param> /// <returns>Список ошибок во время конфигурирования.</returns> public IEnumerable <string> RegisterLayer(IConfigurationRoot config, IServiceCollection services) { var redisConfiguration = config.GetSection(nameof(Configuration.Redis)).Get <Configuration.Redis>(); var configurationErrors = redisConfiguration.ValidateErrors(); var configureationOptions = new ConfigurationOptions() { KeepAlive = redisConfiguration.KeepAlive, Password = redisConfiguration.Password, ConnectRetry = redisConfiguration.ConnectRetry, SyncTimeout = redisConfiguration.SyncTimeoutMs, }; foreach (var ep in redisConfiguration.Endpoints) { configureationOptions.EndPoints.Add(ep.Host, ep.Port); } services.Configure <RedisCacheOptions>((options) => { options.InstanceName = redisConfiguration.InstanceName; options.ConfigurationOptions = configureationOptions; }); services.AddSingleton <IDistributedLockFactory>( (sp) => { if (_lockFactory == null) { var endpoints = configureationOptions.EndPoints.Select(ep => new RedLockEndPoint(ep) { SyncTimeout = configureationOptions.SyncTimeout, Password = configureationOptions.Password, }) .ToList(); var redLockConfiguration = new RedLockConfiguration( endpoints, sp.GetService <ILoggerFactory>()); _lockFactory = new RedLockFactory(redLockConfiguration); } return(_lockFactory); }); services.AddSingleton <IDistributedCache, RedisCache>(); return(configurationErrors); }
/// <summary> /// Create a RedLockFactory using the specified configuration /// </summary> public RedLockFactory(RedLockConfiguration configuration) { this.configuration = configuration ?? throw new ArgumentNullException(nameof(configuration), "Configuration must not be null"); this.redisCaches = configuration.ConnectionProvider.CreateRedisConnections(); }
/// <summary> /// Create a RedLockFactory using a list of RedLockEndPoints (ConnectionMultiplexers will be internally managed by RedLock.net) /// </summary> public static RedLockFactory Create(IList <RedLockEndPoint> endPoints) { var configuration = new RedLockConfiguration(endPoints); return(new RedLockFactory(configuration)); }