Valkey: Verwendung mit Python
Wie man Valkey mit Python verbindet
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Valkey Cloud Lösung, die zahlreiche Vorteile bietet, darunter:
Redis CommanderWeb-UI inklusive.- Unbegrenzte Nachrichtengröße und Übertragungen.
- Mühelose Updates mit nur einem Klick.
- Optimale Performance und robuste Sicherheit durch eine private und dedizierte VM.
Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Valkey Cloud Hosting Lösung von Stackhero auszuprobieren!
Auswahl einer Python-Bibliothek für die Valkey-Integration
Um Ihre Anwendung nahtlos mit Valkey zu integrieren, sollten Sie die redis-Bibliothek für Python in Betracht ziehen. Diese Bibliothek eignet sich gut für die Verbindung zu Valkey, einem Open-Source-Fork von Redis. Sie können sie einfach installieren, indem Sie Folgendes ausführen:
pip install redis
pip freeze > requirements.txt
Verbindung von Python mit Valkey
Lassen Sie uns erkunden, wie Sie Ihre Python-Anwendung mit Valkey verbinden können. Hier ist ein einfaches Beispiel mit Standardeinstellungen:
import redis
r = redis.from_url(
'rediss://default:<password>@<XXXXXX>.stackhero-network.com:<PORT_TLS>',
health_check_interval=10,
socket_connect_timeout=5,
retry_on_timeout=True,
socket_keepalive=True
)
Für erhöhte Sicherheit wird empfohlen, Anmeldedaten über Umgebungsvariablen zu verwalten. So können Sie das tun:
import os
import redis
r = redis.from_url(
os.environ.get("STACKHERO_VALKEY_URL_TLS"),
health_check_interval=10,
socket_connect_timeout=5,
retry_on_timeout=True,
socket_keepalive=True
)
Stellen Sie sicher, dass Ihre Umgebungsvariablen einen Eintrag wie diesen enthalten: STACKHERO_VALKEY_URL_TLS=rediss://default:<password>@<XXXXXX>.stackhero-network.com:<PORT_TLS>.
Verwendung von Pub/Sub mit Valkey und Python
Die Nutzung der Publish/Subscribe (Pub/Sub)-Funktionalität in Python mit Valkey ist einfach. Hier ist ein Beispiel:
import redis
# Verbindung zu Valkey
r = redis.from_url(
'rediss://default:<password>@<XXXXXX>.stackhero-network.com:<PORT_TLS>',
health_check_interval=10,
socket_connect_timeout=5,
socket_keepalive=True,
retry_on_timeout=True
)
# Erstellen einer PubSub-Instanz
p = r.pubsub()
# Abonnieren des Kanals "test"
p.subscribe('test')
# Veröffentlichen einer Nachricht im Kanal "test"
r.publish('test', 'Dies ist eine Testnachricht')
# Abrufen der ersten verfügbaren Nachricht vom Kanal "test"
p.get_message()
# Abbestellen vom Kanal "test"
p.unsubscribe('test')
Erweiterte Beispiele für Valkey Pub/Sub mit Python
Erweitern Sie Ihre Pub/Sub-Fähigkeiten mit diesen erweiterten Beispielen:
# Erstellen einer PubSub-Instanz und Ignorieren von Abonnementnachrichten
p = r.pubsub(ignore_subscribe_messages=True)
# Abonnieren mehrerer Kanäle
p.subscribe('test-1', 'test-2', ...)
# Abbestellen von mehreren Kanälen
p.unsubscribe('test-1', 'test-2', ...)
# Sie können auch "unsubscribe" ohne Argumente verwenden, um sich von allen abonnierten Kanälen zu trennen
p.unsubscribe()
# Abonnieren von Kanälen mit einem Muster
p.psubscribe('my-*')
# Abbestellen von Kanälen mit einem Muster
p.punsubscribe('my-*')
Vermeidung von "Connection Closed by Server"-Fehlern
Der Fehler redis.exceptions.ConnectionError: Connection closed by server kann auftreten, wenn Ihre App für eine Weile nicht mit Valkey interagiert, was zu einer automatischen Trennung führt. Um dies zu verhindern, können Sie den Parameter health_check_interval wie unten gezeigt festlegen:
r = redis.from_url(
'rediss://default:<password>@<XXXXXX>.stackhero-network.com:<PORT_TLS>',
health_check_interval=10,
socket_connect_timeout=5,
retry_on_timeout=True,
socket_keepalive=True
)
Bei der Verwendung der Pub/Sub-Funktion von Valkey erwartet die redis-py-Bibliothek, dass Funktionen wie get_message() oder listen() häufiger als das health_check_interval aufgerufen werden. In unserem Beispiel haben wir dieses Intervall auf 10 Sekunden gesetzt, stellen Sie also sicher, dass Sie get_message() oder listen() mindestens einmal alle 10 Sekunden aufrufen (siehe die offizielle redis-py-Dokumentation).
Wenn dies nicht getan wird, könnten Sie auf denselben Verbindungsfehler stoßen. Um dies zu vermeiden, ziehen Sie in Betracht, regelmäßig check_health() aufzurufen.
Hier ist, wie Sie es implementieren können:
import redis
import threading
# Verbindung zu Valkey
r = redis.from_url(
'rediss://default:<password>@<XXXXXX>.stackhero-network.com:<PORT_TLS>',
health_check_interval=10,
socket_connect_timeout=5,
retry_on_timeout=True,
socket_keepalive=True
)
# Erstellen einer PubSub-Instanz
p = r.pubsub()
# Abonnieren des Kanals "test"
p.subscribe('test')
# Erstellen einer Funktion, die `check_health` alle 5 Sekunden aufruft
def valkey_auto_check(p):
t = threading.Timer(5, valkey_auto_check, [p])
t.start()
p.check_health()
# Aufrufen der Funktion valkey_auto_check
valkey_auto_check(p)