Соединение в Redis и Lua

Это моя конфигурация:

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, клиент: МОЙ IP, сервер: , запрос: "GET /foo HTTP/1.1 ", хост: "IP-адрес СЕРВЕРА"

Когда я отключаю настройку поддержки активности, получаю эту ошибку:

[ошибка] 4147 # 0: * 1089971 lua tcp socket timeout timeout, при подключении к 127.0.0.1: 6379,

Когда я закомментирую строку, связанную с rc:set_keepalive, она работает с одиночными запросами и вылетает при 100 запросах.

Каковы наилучшие методы подключения к Redis в Lua при больших запросах?


person Abdol Seed    schedule 20.07.2019    source источник


Ответы (2)


Самый популярный способ использования Redis в Lua — lua-resty-redis.

Что касается [error] 4044#0: *1068056 attempt to send data on a closed socket, я столкнулся с этим при использовании метода set_timeouts(connect_timeout, send_timeout, read_timeout).

Когда я переключился на метод set_timeout(time), ошибка исчезла.

Я не использовал lua-resty-redis-connector, который, как я предполагаю, вы используете в вашем коде.

person jbochniak    schedule 18.10.2019
comment
Это сработало и для меня; только я понятия не имею, почему? - person Joseph Mariadassou; 14.12.2020

Ваш код неверен.

  1. redis.new не принимает никаких параметров.
  2. connect возвращает ok, err. Нет смысла передавать значение ok в set_keepalive.
  3. set_keepalive принимает 2 числа в качестве параметров.

RTFM, пожалуйста, весь ваш код выглядит как одна большая каша, извините.

person Alexander Altshuler    schedule 22.07.2019
comment
Я думаю, что вы невнимательно прочитали его вопрос. Он не использует lua-resty-redis (github.com/openresty/lua-resty-redis) напрямую, но через lua-resty-redis-connector (github.com/ledgetech /lua-resty-redis-connector) - person jbochniak; 18.10.2019