csredis
csredis copied to clipboard
CSRedisClient.cs 函数 Refresh(int milliseconds) 似乎有点问题?
CSRedisClient.cs 代码
public bool Refresh(int milliseconds)
{
var ret = RedisHelper.Eval(@"local gva = redis.call('GET', KEYS[1])
if gva == ARGV[1] then
redis.call('PEXPIRE', KEYS[1], ARGV[2])
return 1
end
return 0", _name, _value, milliseconds)?.ToString() == "1";
if (ret == false) _autoDelayTimer?.Dispose(); //未知情况,关闭定时器
return ret;
}
/// <summary>
/// 释放分布式锁
/// </summary>
/// <returns>成功/失败</returns>
public bool Unlock()
{
_autoDelayTimer?.Dispose();
return _client.Eval(@"local gva = redis.call('GET', KEYS[1])
if gva == ARGV[1] then
redis.call('DEL', KEYS[1])
return 1
end
return 0", _name, _value)?.ToString() == "1";
}
其中,Refresh() 函数,用到了 RedisHelper.Eval() ,而其他函数用的是 _client.Eval(*) 这导致 如果没有执行 RedisHelper.Initialization(rds); 则会报错。
谢谢反馈,这种情况可以直接pr源码呢