redis-connector: Verbindungswerkzeuge für lua-resty-redis
Installation
Wenn Sie das RPM-Repository-Abonnement noch nicht eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.
CentOS/RHEL 7 oder 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
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-redis-connector v0.11.0, das am 13. Juli 2021 veröffentlicht wurde.
Verbindungswerkzeuge für lua-resty-redis, die es einfach und zuverlässig machen, sich mit Redis-Hosts zu verbinden, entweder direkt oder über Redis Sentinel.
Synopsis
Schnelle und einfache authentifizierte Verbindung auf localhost zu DB 2:
local redis, err = require("resty.redis.connector").new({
url = "redis://[email protected]:6379/2",
}):connect()
Ausführlichere Konfiguration mit Zeitüberschreitungen und einem Standardpasswort:
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) -- verwendet Keepalive-Parameter
Alle Konfigurationen in einer Tabelle speichern, um Verbindungen bei Bedarf einfach zu erstellen / zu schließen:
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 kann verwendet werden, um einige Standardwerte, die in new angegeben sind, zu überschreiben, die nur für diese Verbindung relevant sind.
local rc = require("resty.redis.connector").new({
host = "127.0.0.1",
port = 6379,
db = 2,
})
local redis, err = rc:connect({
db = 5,
})
DSN-Format
Wenn das Feld params.url vorhanden ist, wird es analysiert, um die anderen Parameter festzulegen. Manuell angegebene Parameter überschreiben die im DSN angegebenen Werte.
Hinweis: Dies ist eine Verhaltensänderung seit v0.06. Zuvor hatten die DSN-Werte Vorrang.
Direkte Redis-Verbindungen
Das Format für die direkte Verbindung zu Redis lautet:
redis://USERNAME:PASSWORD@HOST:PORT/DB
Die Felder USERNAME, PASSWORD und DB sind optional, alle anderen Komponenten sind erforderlich.
Die Verwendung eines Benutzernamens erfordert Redis 6.0.0 oder neuer.
Verbindungen über Redis Sentinel
Beim Verbinden über Redis Sentinel lautet das Format:
sentinel://USERNAME:PASSWORD@MASTER_NAME:ROLE/DB
Wiederum sind USERNAME, PASSWORD und DB optional. ROLE muss entweder m oder s für Master / Slave sein.
In Versionen von Redis, die neuer als 5.0.1 sind, können Sentinels optional ihr eigenes Passwort erfordern. Wenn aktiviert, geben Sie dieses Passwort im Parameter sentinel_password an. In Redis 6.2.0 und neuer können Sie den Benutzernamen mit dem Parameter sentinel_username übergeben.
Eine Tabelle von sentinels muss ebenfalls bereitgestellt werden. z.B.
local redis, err = rc:connect{
url = "sentinel://mymaster:a/2",
sentinels = {
{ host = "127.0.0.1", port = 26379 },
},
sentinel_username = "default",
sentinel_password = "password"
}
Proxy-Modus
Aktivieren Sie den Parameter connection_is_proxied, wenn Sie über einen Proxy-Dienst (z.B. Twemproxy) mit Redis verbinden. Diese Proxys unterstützen in der Regel nur eine eingeschränkte Untermenge von Redis-Befehlen, die keinen Zustand erfordern und mehrere Schlüssel nicht beeinflussen. Datenbanken und Transaktionen werden ebenfalls nicht unterstützt.
Der Proxy-Modus deaktiviert das Wechseln zu einer DB bei der Verbindung. Nicht unterstützte Befehle (standardmäßig die, die von Twemproxy nicht unterstützt werden) geben sofort nil, err zurück, anstatt an den Proxy gesendet zu werden, was zu abgebrochenen Verbindungen führen kann.
discard wird nicht gesendet, wenn Verbindungen zum Keepalive-Pool hinzugefügt werden.
Deaktivierte Befehle
Wenn als Tabelle von Befehlen konfiguriert, werden die Befehlsmethoden durch eine Funktion ersetzt, die sofort nil, err zurückgibt, ohne den Befehl an den Server weiterzuleiten.
Standardparameter
{
connect_timeout = 100,
send_timeout = 1000,
read_timeout = 1000,
keepalive_timeout = 60000,
keepalive_poolsize = 30,
-- ssl, ssl_verify, server_name, pool, pool_size, backlog
-- siehe: https://github.com/openresty/lua-resty-redis#connect
connection_options = {},
host = "127.0.0.1",
port = "6379",
path = "", -- unix socket path, z.B. /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)
Erstellt das Redis Connector-Objekt und überschreibt die Standardparameter mit den angegebenen. Im Falle von Fehlern gibt es nil und eine Zeichenfolge zurück, die den Fehler beschreibt.
connect
syntax: redis, err = rc:connect(params)
Versucht, eine Verbindung gemäß den bereitgestellten params herzustellen, und greift auf die in new oder die vordefinierten Standardwerte zurück. Wenn keine Verbindung hergestellt werden kann, gibt es nil und eine Zeichenfolge zurück, die den Grund beschreibt.
Beachten Sie, dass die hier angegebenen params die eigene Konfiguration des Connectors nicht ändern und nur verwendet werden, um diesen speziellen Verbindungsbetrieb zu ändern. Daher haben die folgenden Parameter keine Bedeutung, wenn sie in connect angegeben werden.
keepalive_poolsizekeepalive_timeoutconnection_is_proxieddisabled_commands
set_keepalive
syntax: ok, err = rc:set_keepalive(redis)
Versucht, die gegebene Redis-Verbindung gemäß den Zeitüberschreitungs- und Poolgrößenparametern, die in new oder den vordefinierten Standards angegeben sind, im Keepalive-Pool zu platzieren.
Dies ermöglicht einer Anwendung, Ressourcen freizugeben, ohne die anwendungsweiten Keepalive-Einstellungen verfolgen zu müssen.
Gibt 1 oder im Fehlerfall nil und eine Zeichenfolge zurück, die den Fehler beschreibt.
Utilities
Die folgenden Methoden werden normalerweise nicht benötigt, können jedoch nützlich sein, wenn eine benutzerdefinierte Schnittstelle erforderlich ist.
connect_via_sentinel
syntax: redis, err = rc:connect_via_sentinel(params)
Gibt eine Redis-Verbindung zurück, indem zuerst auf einen Sentinel zugegriffen wird, der durch die Tabelle params.sentinels bereitgestellt wird, und diesen mit dem params.master_name und params.role abfragt.
try_hosts
syntax: redis, err = rc:try_hosts(hosts)
Versucht die angegebenen Hosts in der Reihenfolge und gibt die erste erfolgreiche Verbindung zurück.
connect_to_host
syntax: redis, err = rc:connect_to_host(host)
Versucht, eine Verbindung zum angegebenen host herzustellen.
sentinel.get_master
syntax: master, err = sentinel.get_master(sentinel, master_name)
Gibt, gegeben eine verbundene Sentinel-Instanz und einen Master-Namen, die aktuelle Master-Redis-Instanz zurück.
sentinel.get_slaves
syntax: slaves, err = sentinel.get_slaves(sentinel, master_name)
Gibt, gegeben eine verbundene Sentinel-Instanz und einen Master-Namen, eine Liste der registrierten Slave-Redis-Instanzen zurück.
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-redis-connector.