RedisConnectionException:没有可用于服务此操作的连接:EVAL
我正在尝试在ASP.NET WebForms应用程序(4.7.2)中实现Redis。我从下载了SessionProvider源代码。我正在使用StackExchange.Redis 2.0+ 执行登录后,将抛出此错误: 显然,有人试图RedisConnectionException:没有可用于服务此操作的连接:EVAL,redis,stackexchange.redis,azure-redis-cache,Redis,Stackexchange.redis,Azure Redis Cache,我正在尝试在ASP.NET WebForms应用程序(4.7.2)中实现Redis。我从下载了SessionProvider源代码。我正在使用StackExchange.Redis 2.0+ 执行登录后,将抛出此错误: 显然,有人试图eval一些Lua脚本,但失败了(这是关闭该脚本的结论) 因此,假设这个假设是正确的,我提取了有问题的脚本,并使用rediscli--eval以及键和参数运行它 local retArray = {} local lockValue = ARGV[1] loc
eval
一些Lua脚本,但失败了(这是关闭该脚本的结论)
因此,假设这个假设是正确的,我提取了有问题的脚本,并使用rediscli--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
这是成功的
是否存在可能引发此异常的其他问题
编辑:升级到2.0。仍然在遭受同样的问题。我试图研究您的问题,然后我发现GitHub
StackExchange/StackExchange.Redis
repo的问题似乎与您的问题相同
根据GitHub问题底部的注释,另一个问题是,2.0
下的版本有一些bug需要修复,比如网络连接稳定性问题
因此,我建议您可以将当前的StackExchange.Redis(V1.2.6)
升级到最新的稳定2.x
版本,然后重试您的代码。同时,请注意,Azure/aspnet redis providers的功能,以制作正确且兼容的版本来支持您当前的代码。遗憾的是,2.+软件包还存在我无法解决的其他问题(请参阅)。简而言之,即使使用Nuget下载软件包和依赖项,它仍然无法找到某些特定版本的DLL(例如,System.Memory
)更新到2.0+软件包,现在我遇到了完全相同的问题:(