sql >> Database teknologi >  >> NoSQL >> Redis

Python &Redis:Bedste praksis for Manager/Worker-applikationer

Dit problem er, at du forsøger at køre flere kommandoer samtidigt med en enkelt redis-forbindelse.

Du forventer noget lignende

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
command      
             LLEN test
             0

men du får

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
             LLEN test
             command
0

Resultaterne kommer tilbage i samme rækkefølge, men der er intet, der forbinder en tråd eller kommando til et specifikt resultat. Individuelle redis-forbindelser er ikke gevindsikre - du skal bruge en for hver arbejdstråd.

Du kan også se lignende problemer, hvis du bruger pipelining uhensigtsmæssigt - det er designet til kun at skrive scenarier som f.eks. at tilføje masser af elementer til en liste, hvor du kan forbedre ydeevnen ved at antage, at LPUSH lykkedes i stedet for at vente på, at serveren fortæller dig, at det lykkedes efter hver vare. Redis vil stadig returnere resultaterne, men de vil ikke nødvendigvis være resultater fra den sidst sendte kommando.

Bortset fra det er den grundlæggende tilgang rimelig. Der er dog et par forbedringer, du kan lave:

  • I stedet for at tjekke længden, brug bare ikke-blokerende LPOP - hvis det returnerer null, er listen tom
  • Tilføj en timer, så hvis listen er tom, vil den vente i stedet for blot at udstede en anden kommando.
  • Inkluder en annulleringskontrol i while-løkketilstanden
  • Håndter forbindelsesfejl - jeg bruger en ydre sløjfe, der er sat op, så hvis forbindelsen mislykkes, vil arbejderen forsøge at oprette forbindelse igen (grundlæggende genstart main ) i et rimeligt antal forsøg, før du afslutter arbejdsprocessen helt.



  1. Hvad er den bedste måde at håndtere global forbindelse af Mongodb i NodeJs

  2. 3 måder at returnere distinkte værdier i MongoDB

  3. Hvordan udelukker man dokumenter fra søgeresultater med felter, der ikke er til stede i forespørgslen?

  4. opslag i mongodb aggregering