KärndataBakgrundsarbete

Jobbköer

FIFO-köer som inte tappar jobb när en arbetare dör, med producenter och konsumenter som körs parallellt.

LPUSH/s med pipelining, uppmätt
31.6M
jobb förlorade vid en krasch
0
polling
0
Steg 1 av 5
Producenter lägger in jobb

Vilken tjänst som helst lägger till arbete utan att vänta på konsumenterna.

Exempelsessionplaying
# Producenter lägger in jobb
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

En animerad genomgång med riktiga HotKV-kommandon och exempelsvar. Klicka på valfritt steg för att hoppa dit. Kommandon och svar förblir på engelska, precis som du skriver och ser dem i HotKV.

Problemet

Bakgrundsarbete som e-post, bildskalning och webhooks behöver en kö mellan koden som skapar det och koden som utför det. En kö som tappar ett jobb när en arbetare kraschar mitt i en uppgift är sämre än ingen kö, eftersom ingen märker att jobbet är borta.

Så löser HotKV det

Listor ger dig en enkel FIFO-kö. BLMOVE flyttar varje jobb till en bearbetningslista i samma stund som det lämnas till en arbetare, så att ett pågående jobb alltid finns lagrat någonstans om arbetaren försvinner. Producenter och konsumenter betjänas av parallella arbetstrådar.

Steg för steg

Vad som händer, kommando för kommando

  1. 01

    Producenter lägger in jobb

    Vilken tjänst som helst lägger till arbete utan att vänta på konsumenterna.

    LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  2. 02

    En arbetare tar ett jobb på ett säkert sätt

    BLMOVE blockerar tills ett jobb finns och flyttar det sedan till en bearbetningslista i ett enda steg.

    BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0
  3. 03

    Kvittera när det är klart

    E-postmeddelandet skickades. Jobbet tas bort från bearbetningslistan.

    LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  4. 04

    En arbetare kraschar

    Arbetare 2 dör mitt i ett jobb. Dess jobb ligger kvar i bearbetningslistan, inte förlorat.

    LRANGE queue:emails:processing 0 -1
  5. 05

    Köa om och fortsätt

    En övervakare flyttar tillbaka det övergivna jobbet till kön och en annan arbetare tar det.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
Där det passar

Verkliga scenarier

Transaktionell e-post och SMS

Registrerings-, kvitto- och återställningsmeddelanden köas av webbappen och skickas av en pool av arbetare.

Mediabearbetning

Uppladdningar köas för miniatyrer och omkodning, och en omkodare som kraschar tappar aldrig en fil.

Leverans av webhooks

Utgående webhooks köas och skickas om utan att blockera förfrågan som utlöste dem.

Inbyggt

Det här får du

FIFO med blockerande läsningar

LPUSH med BRPOP, och arbetare sover tills arbete kommer.

LPUSHBRPOP

Inga förlorade jobb

BLMOVE lämnar varje jobb till en bearbetningslista atomärt.

BLMOVELREM

Parallella producenter och konsumenter

Producenter och konsumenter betjänas av parallella arbetstrådar.

Behöver du mer?

För kvittenser, konsumentgrupper och uppspelning, använd strömmar.

XADDXREADGROUP

Vanliga frågor

Vad händer med ett jobb om en arbetare kraschar?

Om du tar jobb med BLMOVE ligger jobbet kvar i bearbetningslistan. En övervakare kan flytta tillbaka allt som legat där för länge till kön.

Måste arbetare polla?

Nej. BRPOP och BLMOVE blockerar tills ett jobb kommer, med en valfri tidsgräns.

Listor eller strömmar?

Listor är den enklaste kön. Strömmar lägger till konsumentgrupper, kvittens per meddelande och historik. Se användningsfallet händelseströmmar.

Relaterade användningsfall

Prova på din egen arbetslast

HotKV talar Redis-protokollet, så du kan peka en befintlig klient mot det och köra samma kommandon.