hi,各位大牛,
以下是我封装的连接Redis的通用代码。
我发现我把Redis关了后,接口并不会经过set_timeout()里面设置的时间后才失败,而是极快的就失败了。
这个是cosocket干的吗?这个set_timeout()设置的超时时间,到底是什么情况下才会生效?
谢谢~
-- 连接Redis的通用方法,当连接失败时,返回nil
-- @param string ip Redis服务器IP
-- @param number port Redis服务器端口
-- @param number timeout 连接超时时间
-- @return nil or connected redis obj
local function get_connected_redis(ip, port, timeout)
-- 校验输入参数
if (ip == nil or type(ip) ~= "string") or (port == nil or type(port) ~= "number") or (timeout ~= nil and type(timeout) ~= "number")then
return nil
end
-- 默认超时时间2s
local default_timeout = 2000
timeout = timeout or default_timeout
-- 创建Redis连接
local red = redis:new()
-- 设置连接超时时间
red:set_timeout(timeout)
-- 连接Redis
local ok, err = red:connect(ip, port)
if not ok then
ngx.log(ngx.ERR, "fail to connect redis, ip: " .. ip .. ", port: " .. port .. ", timeout: " .. timeout .. "err msg: " .. err)
return nil
else
return red
end
end