Redis和Lua中的连接

时间:2019-07-20 11:29:19

标签: nginx redis lua openresty

这是我的配置:

local rc = require("resty.redis.connector").new({
                connect_timeout = 50,
                read_timeout = 5000,
                keepalive_timeout = 30000
            })

            local redis, err1 = rc:connect({
                url = "redis://127.0.0.1:6379",
            })

            if not redis then
                ngx.say( err1)    
            else
                ngx.say('connection fine')    
            end

            local ok, err = rc:set_keepalive(redis)  

我收到此错误:

  

[错误] 4044#0:* 1068056尝试在关闭的套接字上发送数据:   u:00007F2BABA05D48,c:0000000000000000,ft:0 eof:0,客户端:MY IP,   服务器:,请求:“ GET / foo HTTP / 1.1”,主机:“ SERVER IP”

当我禁用keepalive设置时,出现此错误:

  

[错误] 4147#0:* 1089971 lua tcp套接字连接超时,当   连接到127.0.0.1:6379,

当我注释掉与rc:set_keepalive相关的行时,它适用于单个请求,并且崩溃于100​​个请求。

在大量需求下连接Lua中的Redis的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

在Lua中使用Redis的最流行方法是lua-resty-redis

关于unconfined_t 使用set_timeouts(connect_timeout, send_timeout, read_timeout)方法时,我已经经历过了。

当我切换到set_timeout(time)方法时,错误消失了。

我还没有使用过lua-resty-redis-connector(我假设您在代码中使用过)。

答案 1 :(得分:0)

您的代码不正确。

  1. redis.new不接受任何参数。
  2. connect返回ok, err。将ok的值传递给set_keepalive毫无意义。
  3. set_keepalive接受2个数字作为参数。

RTFM,请对不起,您的所有代码看起来都一团糟。