private RedLock( ILogger <RedLock> logger, ICollection <RedisConnection> redisCaches, string resource, TimeSpan expiryTime, TimeSpan?waitTime = null, TimeSpan?retryTime = null, RedLockRetryConfiguration retryConfiguration = null, CancellationToken?cancellationToken = null) { this.logger = logger; if (expiryTime < minimumExpiryTime) { logger.LogWarning($"Expiry time {expiryTime.TotalMilliseconds}ms too low, setting to {minimumExpiryTime.TotalMilliseconds}ms"); expiryTime = minimumExpiryTime; } if (retryTime != null && retryTime.Value < minimumRetryTime) { logger.LogWarning($"Retry time {retryTime.Value.TotalMilliseconds}ms too low, setting to {minimumRetryTime.TotalMilliseconds}ms"); retryTime = minimumRetryTime; } this.redisCaches = redisCaches; quorum = redisCaches.Count / 2 + 1; quorumRetryCount = retryConfiguration?.RetryCount ?? 3; quorumRetryDelayMs = retryConfiguration?.RetryDelayMs ?? 400; clockDriftFactor = 0.01; Resource = resource; LockId = Guid.NewGuid().ToString(); this.expiryTime = expiryTime; this.waitTime = waitTime; this.retryTime = retryTime; this.cancellationToken = cancellationToken ?? CancellationToken.None; }
internal static async Task <RedLock> CreateAsync( ILogger <RedLock> logger, ICollection <RedisConnection> redisCaches, string resource, TimeSpan expiryTime, TimeSpan?waitTime = null, TimeSpan?retryTime = null, RedLockRetryConfiguration retryConfiguration = null, CancellationToken?cancellationToken = null) { var redisLock = new RedLock( logger, redisCaches, resource, expiryTime, waitTime, retryTime, retryConfiguration, cancellationToken); await redisLock.StartAsync().ConfigureAwait(false); return(redisLock); }
/// <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> /// 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)); }