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));
        }
Example #2
0
        /// <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();
        }
Example #3
0
        /// <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));
        }
Example #4
0
        /// <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));
        }
Example #5
0
        /// <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));
        }
Example #6
0
        /// <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);
        }
Example #7
0
 /// <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();
 }
Example #8
0
        /// <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));
        }