redis-connector: Utilidades de conexión para lua-resty-redis
Instalación
Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.
CentOS/RHEL 7 o 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 con NGINX, asegúrate de que nginx-module-lua esté instalado.
Este documento describe lua-resty-redis-connector v0.11.0 lanzado el 13 de julio de 2021.
Utilidades de conexión para lua-resty-redis, que facilitan y hacen confiable la conexión a hosts de Redis, ya sea directamente o a través de Redis Sentinel.
Sinopsis
Conexión autenticada rápida y simple en localhost a la base de datos 2:
local redis, err = require("resty.redis.connector").new({
url = "redis://[email protected]:6379/2",
}):connect()
Configuración más detallada, con tiempos de espera y una contraseña predeterminada:
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 los parámetros de keepalive
Mantén toda la configuración en una tabla, para crear / cerrar conexiones fácilmente según sea necesario:
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 se puede usar para anular algunos valores predeterminados dados en new, que son pertinentes solo a esta conexión.
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
Si el campo params.url está presente, se analizará para establecer los otros parámetros. Cualquier parámetro especificado manualmente anulará los valores dados en el DSN.
Nota: este es un cambio de comportamiento a partir de v0.06. Anteriormente, los valores del DSN tenían prioridad.
Conexiones directas a Redis
El formato para conectarse directamente a Redis es:
redis://USERNAME:PASSWORD@HOST:PORT/DB
Los campos USERNAME, PASSWORD y DB son opcionales, todos los demás componentes son obligatorios.
El uso de nombre de usuario requiere Redis 6.0.0 o más reciente.
Conexiones a través de Redis Sentinel
Al conectarse a través de Redis Sentinel, el formato es el siguiente:
sentinel://USERNAME:PASSWORD@MASTER_NAME:ROLE/DB
Nuevamente, USERNAME, PASSWORD y DB son opcionales. ROLE debe ser m o s para maestro / esclavo respectivamente.
En versiones de Redis más recientes que 5.0.1, los Sentinels pueden requerir opcionalmente su propia contraseña. Si está habilitado, proporciona esta contraseña en el parámetro sentinel_password. En Redis 6.2.0 y versiones más recientes, puedes pasar el nombre de usuario usando el parámetro sentinel_username.
También debe proporcionarse una tabla de sentinels. Por ejemplo:
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
Habilita el parámetro connection_is_proxied si te conectas a Redis a través de un servicio proxy (por ejemplo, Twemproxy). Estos proxies generalmente solo admiten un subconjunto limitado de comandos de Redis, aquellos que no requieren estado y no afectan a múltiples claves. Las bases de datos y las transacciones tampoco son compatibles.
El modo proxy deshabilitará el cambio a una base de datos al conectarse. Los comandos no admitidos (de forma predeterminada aquellos no admitidos por Twemproxy) devolverán nil, err de inmediato en lugar de ser enviados al proxy, lo que puede resultar en conexiones perdidas.
discard no se enviará al agregar conexiones al grupo de keepalive.
Comandos deshabilitados
Si se configura como una tabla de comandos, los métodos de comando serán reemplazados por una función que devuelve inmediatamente nil, err sin reenviar el comando al servidor.
Parámetros predeterminados
{
connect_timeout = 100,
send_timeout = 1000,
read_timeout = 1000,
keepalive_timeout = 60000,
keepalive_poolsize = 30,
-- ssl, ssl_verify, server_name, pool, pool_size, backlog
-- ver: https://github.com/openresty/lua-resty-redis#connect
connection_options = {},
host = "127.0.0.1",
port = "6379",
path = "", -- ruta del socket unix, por ejemplo /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)
Crea el objeto Redis Connector, sobrescribiendo los parámetros predeterminados con los proporcionados. En caso de fallos, devuelve nil y una cadena que describe el error.
connect
syntax: redis, err = rc:connect(params)
Intenta crear una conexión, de acuerdo con los params suministrados, volviendo a los valores predeterminados dados en new o los valores predeterminados predefinidos. Si no se puede establecer una conexión, devuelve nil y una cadena que describe la razón.
Ten en cuenta que los params dados aquí no cambian la configuración propia del conector, y solo se utilizan para alterar esta operación de conexión particular. Como tal, los siguientes parámetros no tienen sentido cuando se dan en connect.
keepalive_poolsizekeepalive_timeoutconnection_is_proxieddisabled_commands
set_keepalive
syntax: ok, err = rc:set_keepalive(redis)
Intenta colocar la conexión Redis dada en el grupo de keepalive, de acuerdo con los parámetros de tiempo de espera y tamaño del grupo dados en new o los valores predeterminados predefinidos.
Esto permite a una aplicación liberar recursos sin tener que hacer un seguimiento de la configuración de keepalive a nivel de aplicación.
Devuelve 1 o, en caso de error, nil y una cadena que describe el error.
Utilidades
Los siguientes métodos no son típicamente necesarios, pero pueden ser útiles si se requiere una interfaz personalizada.
connect_via_sentinel
syntax: redis, err = rc:connect_via_sentinel(params)
Devuelve una conexión Redis accediendo primero a un sentinel como se proporciona en la tabla params.sentinels, y consultando esto con el params.master_name y params.role.
try_hosts
syntax: redis, err = rc:try_hosts(hosts)
Intenta los hosts suministrados en orden y devuelve la primera conexión exitosa.
connect_to_host
syntax: redis, err = rc:connect_to_host(host)
Intenta conectarse al host suministrado.
sentinel.get_master
syntax: master, err = sentinel.get_master(sentinel, master_name)
Dada una instancia de Sentinel conectada y un nombre de maestro, devolverá la instancia actual de Redis maestro.
sentinel.get_slaves
syntax: slaves, err = sentinel.get_slaves(sentinel, master_name)
Dada una instancia de Sentinel conectada y un nombre de maestro, devolverá una lista de instancias de Redis esclavas registradas.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-redis-connector.