@@ -14,15 +14,17 @@ namespace WorkflowCore.Providers.Redis.Services
14
14
public class RedisLockProvider : IDistributedLockProvider
15
15
{
16
16
private readonly ILogger _logger ;
17
- private readonly string _connectionString ;
17
+ private readonly string _connectionString ;
18
+ private readonly string _prefix ;
18
19
private IConnectionMultiplexer _multiplexer ;
19
20
private RedLockFactory _redlockFactory ;
20
21
private readonly TimeSpan _lockTimeout = TimeSpan . FromMinutes ( 1 ) ;
21
22
private readonly List < IRedLock > ManagedLocks = new List < IRedLock > ( ) ;
22
23
23
- public RedisLockProvider ( string connectionString , ILoggerFactory logFactory )
24
+ public RedisLockProvider ( string connectionString , string prefix , ILoggerFactory logFactory )
24
25
{
25
26
_connectionString = connectionString ;
27
+ _prefix = prefix ;
26
28
_logger = logFactory . CreateLogger ( GetType ( ) ) ;
27
29
}
28
30
@@ -31,7 +33,7 @@ public async Task<bool> AcquireLock(string Id, CancellationToken cancellationTok
31
33
if ( _redlockFactory == null )
32
34
throw new InvalidOperationException ( ) ;
33
35
34
- var redLock = await _redlockFactory . CreateLockAsync ( Id , _lockTimeout ) ;
36
+ var redLock = await _redlockFactory . CreateLockAsync ( GetResource ( Id ) , _lockTimeout ) ;
35
37
36
38
if ( redLock . IsAcquired )
37
39
{
@@ -50,11 +52,13 @@ public Task ReleaseLock(string Id)
50
52
if ( _redlockFactory == null )
51
53
throw new InvalidOperationException ( ) ;
52
54
55
+ var resource = GetResource ( Id ) ;
56
+
53
57
lock ( ManagedLocks )
54
58
{
55
59
foreach ( var redLock in ManagedLocks )
56
60
{
57
- if ( redLock . Resource == Id )
61
+ if ( redLock . Resource == resource )
58
62
{
59
63
redLock . Dispose ( ) ;
60
64
ManagedLocks . Remove ( redLock ) ;
@@ -77,7 +81,15 @@ public async Task Stop()
77
81
_redlockFactory ? . Dispose ( ) ;
78
82
await _multiplexer . CloseAsync ( ) ;
79
83
_multiplexer = null ;
80
-
84
+
85
+ }
86
+
87
+ private string GetResource ( string key )
88
+ {
89
+ if ( string . IsNullOrEmpty ( _prefix ) )
90
+ return key ;
91
+
92
+ return $ "{ _prefix } :{ key } ";
81
93
}
82
94
}
83
95
}
0 commit comments