RedisConnectionException:没有可用的连接服务此操作:EVAL

时间:2019-12-08 07:43:17

标签: redis stackexchange.redis azure-redis-cache

我正在尝试在ASP.NET WebForms应用程序(4.7.2)中实现Redis。我从https://github.com/Azure/aspnet-redis-providers下载了SessionProvider源代码。我正在使用StackExchange.Redis 2.0 +。

执行登录后,将引发此错误:

enter image description here

显然,有人尝试eval编写一些Lua脚本,但失败了(这是StackExchange.Redis related issue关闭的结论)。

因此,假设这个假设是正确的,我提取了有问题的脚本,并使用redis-cli --eval以及键和参数来运行它。

local retArray = {} 
local lockValue = ARGV[1] 
local locked = redis.call('SETNX',KEYS[1],ARGV[1])        
local IsLocked = true

if locked == 0 then
    lockValue = redis.call('GET',KEYS[1])
else
    redis.call('EXPIRE',KEYS[1],ARGV[2])
    IsLocked = false
end

retArray[1] = lockValue
if lockValue == ARGV[1] then retArray[2] = redis.call('HGETALL',KEYS[2]) else retArray[2] = '' end

local SessionTimeout = redis.call('HGET', KEYS[3], 'SessionTimeout')
if SessionTimeout ~= false then 
    retArray[3] = SessionTimeout 
    redis.call('EXPIRE',KEYS[2], SessionTimeout) 
    redis.call('EXPIRE',KEYS[3], SessionTimeout) 
else 
    retArray[3] = '-1' 
end

retArray[4] = IsLocked
return retArray

成功了。

enter image description here

还有其他可能引发此异常的问题吗?

编辑:升级到2.0。仍然遭受着同样的问题。

1 个答案:

答案 0 :(得分:1)

我尝试研究您的问题,然后发现GitHub StackExchange/StackExchange.Redis回购中有一个问题No connection is available to service this operation using v.1.2.6 #762,似乎与您的问题相同。

根据GitHub问题底部的注释注释,另一个问题"network stability" / 2.0 / "pipelines" rollup issue #8712.0下的版本需要修复一些错误,例如{{ 1}}问题。

因此,我建议您可以将当前的network connection stability升级到最新的稳定的StackExchange.Redis (V1.2.6)版本,然后重试代码。同时,请注意2.x中的Release Notes,以提供正确且兼容的版本来支持您当前的代码。