csredis icon indicating copy to clipboard operation
csredis copied to clipboard

CSRedisClient.cs 函数 Refresh(int milliseconds) 似乎有点问题?

Open shuxiaolong opened this issue 3 years ago • 1 comments

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); 则会报错。

shuxiaolong avatar Feb 19 '22 21:02 shuxiaolong

谢谢反馈,这种情况可以直接pr源码呢

2881099 avatar Feb 23 '22 03:02 2881099