我正在尝试在ASP.NET WebForms应用程序(4.7.2)中实现Redis。我从https://github.com/Azure/aspnet-redis-providers下载了SessionProvider源代码。我正在使用StackExchange.Redis 2.0 +。
执行登录后,将引发此错误:
显然,有人尝试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
成功了。
还有其他可能引发此异常的问题吗?
编辑:升级到2.0。仍然遭受着同样的问题。
答案 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 #871,2.0
下的版本需要修复一些错误,例如{{ 1}}问题。
因此,我建议您可以将当前的network connection stability
升级到最新的稳定的StackExchange.Redis (V1.2.6)
版本,然后重试代码。同时,请注意2.x
中的Release Notes
,以提供正确且兼容的版本来支持您当前的代码。