redis-connector: Utilitários de conexão para lua-resty-redis
Instalação
Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.
CentOS/RHEL 7 ou Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-redis-connector
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-redis-connector
Para usar esta biblioteca Lua com NGINX, certifique-se de que o nginx-module-lua esteja instalado.
Este documento descreve o lua-resty-redis-connector v0.11.0 lançado em 13 de julho de 2021.
Utilitários de conexão para lua-resty-redis, facilitando e tornando confiável a conexão com hosts Redis, seja diretamente ou via Redis Sentinel.
Sinopse
Conexão autenticada rápida e simples no localhost para o DB 2:
local redis, err = require("resty.redis.connector").new({
url = "redis://[email protected]:6379/2",
}):connect()
Configuração mais detalhada, com timeouts e uma senha padrão:
local rc = require("resty.redis.connector").new({
connect_timeout = 50,
send_timeout = 5000,
read_timeout = 5000,
keepalive_timeout = 30000,
password = "mypass",
})
local redis, err = rc:connect({
url = "redis://127.0.0.1:6379/2",
})
-- ...
local ok, err = rc:set_keepalive(redis) -- usa parâmetros de keepalive
Mantenha toda a configuração em uma tabela, para criar / fechar conexões facilmente conforme necessário:
local rc = require("resty.redis.connector").new({
connect_timeout = 50,
send_timeout = 5000,
read_timeout = 5000,
keepalive_timeout = 30000,
host = "127.0.0.1",
port = 6379,
db = 2,
password = "mypass",
})
local redis, err = rc:connect()
-- ...
local ok, err = rc:set_keepalive(redis)
connect pode ser usado para substituir alguns padrões dados em new, que são pertinentes apenas a esta conexão.
local rc = require("resty.redis.connector").new({
host = "127.0.0.1",
port = 6379,
db = 2,
})
local redis, err = rc:connect({
db = 5,
})
Formato DSN
Se o campo params.url estiver presente, ele será analisado para definir os outros parâmetros. Quaisquer parâmetros especificados manualmente substituirão os valores dados no DSN.
Nota: esta é uma mudança de comportamento a partir da v0.06. Anteriormente, os valores do DSN teriam precedência.
Conexões diretas com Redis
O formato para conectar-se diretamente ao Redis é:
redis://USERNAME:PASSWORD@HOST:PORT/DB
Os campos USERNAME, PASSWORD e DB são opcionais, todos os outros componentes são obrigatórios.
O uso de nome de usuário requer Redis 6.0.0 ou mais recente.
Conexões via Redis Sentinel
Ao conectar-se via Redis Sentinel, o formato é o seguinte:
sentinel://USERNAME:PASSWORD@MASTER_NAME:ROLE/DB
Novamente, USERNAME, PASSWORD e DB são opcionais. ROLE deve ser m ou s para mestre / escravo, respectivamente.
Em versões do Redis mais recentes que 5.0.1, os Sentinels podem opcionalmente exigir sua própria senha. Se ativado, forneça essa senha no parâmetro sentinel_password. No Redis 6.2.0 e mais recente, você pode passar o nome de usuário usando o parâmetro sentinel_username.
Uma tabela de sentinels também deve ser fornecida. Ex.:
local redis, err = rc:connect{
url = "sentinel://mymaster:a/2",
sentinels = {
{ host = "127.0.0.1", port = 26379 },
},
sentinel_username = "default",
sentinel_password = "password"
}
Modo Proxy
Ative o parâmetro connection_is_proxied se conectar ao Redis através de um serviço proxy (por exemplo, Twemproxy). Esses proxies geralmente suportam apenas um subconjunto limitado de comandos Redis, aqueles que não requerem estado e não afetam várias chaves. Bancos de dados e transações também não são suportados.
O modo proxy desativará a troca para um DB na conexão. Comandos não suportados (padrão para aqueles não suportados pelo Twemproxy) retornarão nil, err imediatamente em vez de serem enviados para o proxy, o que pode resultar em conexões perdidas.
discard não será enviado ao adicionar conexões ao pool de keepalive.
Comandos Desativados
Se configurado como uma tabela de comandos, os métodos de comando serão substituídos por uma função que retorna imediatamente nil, err sem encaminhar o comando para o servidor.
Parâmetros Padrão
{
connect_timeout = 100,
send_timeout = 1000,
read_timeout = 1000,
keepalive_timeout = 60000,
keepalive_poolsize = 30,
-- ssl, ssl_verify, server_name, pool, pool_size, backlog
-- veja: https://github.com/openresty/lua-resty-redis#connect
connection_options = {},
host = "127.0.0.1",
port = "6379",
path = "", -- caminho do socket unix, ex. /tmp/redis.sock
username = "",
password = "",
sentinel_username = "",
sentinel_password = "",
db = 0,
master_name = "mymaster",
role = "master", -- master | slave
sentinels = {},
connection_is_proxied = false,
disabled_commands = {},
}
API
new
syntax: rc = redis_connector.new(params)
Cria o objeto Redis Connector, substituindo os parâmetros padrão pelos fornecidos. Em caso de falhas, retorna nil e uma string descrevendo o erro.
connect
syntax: redis, err = rc:connect(params)
Tenta criar uma conexão, de acordo com os params fornecidos, recorrendo aos padrões dados em new ou aos padrões predefinidos. Se uma conexão não puder ser estabelecida, retorna nil e uma string descrevendo o motivo.
Observe que os params dados aqui não alteram a configuração própria do conector e são usados apenas para alterar esta operação de conexão específica. Assim, os seguintes parâmetros não têm significado quando dados em connect.
keepalive_poolsizekeepalive_timeoutconnection_is_proxieddisabled_commands
set_keepalive
syntax: ok, err = rc:set_keepalive(redis)
Tenta colocar a conexão Redis dada no pool de keepalive, de acordo com os parâmetros de timeout e poolsize dados em new ou os padrões predefinidos.
Isso permite que uma aplicação libere recursos sem precisar acompanhar as configurações de keepalive em toda a aplicação.
Retorna 1 ou, em caso de erro, nil e uma string descrevendo o erro.
Utilities
Os seguintes métodos não são tipicamente necessários, mas podem ser úteis se uma interface personalizada for requerida.
connect_via_sentinel
syntax: redis, err = rc:connect_via_sentinel(params)
Retorna uma conexão Redis acessando primeiro um sentinel conforme fornecido pela tabela params.sentinels, e consultando isso com o params.master_name e params.role.
try_hosts
syntax: redis, err = rc:try_hosts(hosts)
Tenta os hosts fornecidos em ordem e retorna a primeira conexão bem-sucedida.
connect_to_host
syntax: redis, err = rc:connect_to_host(host)
Tenta conectar-se ao host fornecido.
sentinel.get_master
syntax: master, err = sentinel.get_master(sentinel, master_name)
Dada uma instância Sentinel conectada e um nome de mestre, retornará a instância Redis mestre atual.
sentinel.get_slaves
syntax: slaves, err = sentinel.get_slaves(sentinel, master_name)
Dada uma instância Sentinel conectada e um nome de mestre, retornará uma lista de instâncias Redis escravas registradas.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-redis-connector.