Skip to content

Commit 1eb11b1

Browse files
authored
fix redis distributed lock for different process (#446)
* fix redis distributed lock for different process * change LockRelease to LockReleaseAsync
1 parent 1fd9023 commit 1eb11b1

File tree

1 file changed

+7
-14
lines changed

1 file changed

+7
-14
lines changed

src/EasyCaching.Redis/DistributedLock/RedisLockProvider.cs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,19 @@ public class RedisLockProvider : IDistributedLockProvider
1212
public RedisLockProvider(IDatabase database) => _database = database;
1313

1414
public Task<bool> SetAsync(string key, byte[] value, int ttlMs) =>
15-
_database.StringSetAsync(key, value, TimeSpan.FromMilliseconds(ttlMs));
15+
_database.StringSetAsync((RedisKey)key, (RedisValue)value, TimeSpan.FromMilliseconds(ttlMs));
1616

1717
public bool Add(string key, byte[] value, int ttlMs) =>
18-
_database.StringSet(key, value, TimeSpan.FromMilliseconds(ttlMs));
18+
_database.LockTake((RedisKey)key, (RedisValue)value, TimeSpan.FromMilliseconds(ttlMs));
1919

2020
public Task<bool> AddAsync(string key, byte[] value, int ttlMs) =>
21-
_database.StringSetAsync(key, value, TimeSpan.FromMilliseconds(ttlMs));
21+
_database.LockTakeAsync((RedisKey)key, (RedisValue)value, TimeSpan.FromMilliseconds(ttlMs));
2222

23-
public bool Delete(string key, byte[] value) =>
24-
(long)_database.ScriptEvaluate(@"if redis.call('GET', KEYS[1]) == ARGV[1] then
25-
return redis.call('DEL', KEYS[1]);
26-
end
27-
return -1;", new RedisKey[] { key }, new RedisValue[] { value }) >= 0;
23+
public bool Delete(string key, byte[] value) => _database.LockRelease((RedisKey)key, (RedisValue)value);
2824

29-
public async Task<bool> DeleteAsync(string key, byte[] value) =>
30-
(long)await _database.ScriptEvaluateAsync(@"if redis.call('GET', KEYS[1]) == ARGV[1] then
31-
return redis.call('DEL', KEYS[1]);
32-
end
33-
return -1;", new RedisKey[] { key }, new RedisValue[] { value }) >= 0;
25+
public Task<bool> DeleteAsync(string key, byte[] value) =>
26+
_database.LockReleaseAsync((RedisKey)key, (RedisValue)value);
3427

3528
public bool CanRetry(Exception ex) => ex is RedisConnectionException;
3629
}
37-
}
30+
}

0 commit comments

Comments
 (0)