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 Commander web 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)