Valkey: Kaip išvengti "Connection Closed by Server" klaidų
Ši dokumentacija yra Naudojimas su Python vadovo dalis. Visą vadovą rasite čia: Kaip sujungti Valkey su Python.
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti Valkey cloud sprendimą, kuris suteikia daugybę privalumų, įskaitant:
- Įtraukta
Redis Commanderweb UI sąsaja.- Neribotas žinučių dydis ir perdavimai.
- Paprasti atnaujinimai vienu paspaudimu.
- Optimali veikla ir tvirta sauga, užtikrinama privačia ir dedikuota VM.
Taupykite laiką ir supaprastinkite savo gyvenimą: tereikia 5 minučių, kad išbandytumėte Stackhero Valkey cloud hosting sprendimą!
Klaida redis.exceptions.ConnectionError: Connection closed by server gali atsirasti, jei jūsų programa nesąveikauja su Valkey tam tikrą laiką, dėl ko įvyksta automatinis atsijungimas. Norėdami to išvengti, galite nustatyti health_check_interval parametrą, kaip parodyta žemiau:
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
)
Naudojant Valkey Pub/Sub funkciją, redis-py biblioteka tikisi, kad funkcijos kaip get_message() ar listen() bus kviečiamos dažniau nei health_check_interval. Mūsų pavyzdyje šis intervalas nustatytas 10 sekundžių, todėl įsitikinkite, kad kviečiate get_message() ar listen() bent kartą kas 10 sekundžių (žr. redis-py oficialią dokumentaciją).
Jei to nepadarysite, galite susidurti su ta pačia prisijungimo klaida. Norėdami to išvengti, apsvarstykite galimybę reguliariai kviesti check_health().
Štai kaip galite tai įgyvendinti:
import redis
import threading
# Prisijungti prie 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
)
# Sukurti PubSub instanciją
p = r.pubsub()
# Prenumeruoti kanalą "test"
p.subscribe('test')
# Sukurti funkciją, kuri kvies `check_health` kas 5 sekundes
def valkey_auto_check(p):
t = threading.Timer(5, valkey_auto_check, [p])
t.start()
p.check_health()
# Kviesti valkey_auto_check funkciją
valkey_auto_check(p)