KärndataE-handel

Blixtrea och lagersaldo

Sälj exakt det lager du har när tiotusen kunder klickar på Köp under samma sekund, och håll botarna ute.

minskning av lager
Atomär
överförsålda enheter
0
reservationer som släpps av sig själva
10 min
Steg 1 av 6
Läs in lagret

500 enheter går ut till försäljning.

Exempelsessionplaying
# Läs in lagret
hotkv> SET stock:sneaker-x 500
OK

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

Vid en blixtrea är lagerdatabasen flaskhalsen precis när det betyder mest. Kontroller som läser och sedan skriver överförsäljer under samtidighet, övergivna varukorgar låser lagret för evigt, och botar köper lagret innan riktiga kunder hunnit läsa in sidan.

Så löser HotKV det

Lagret finns i en räknare som minskas atomärt, så att samtidiga köpare aldrig kan ta mer än det som finns. Varje reservation är en nyckel med tio minuters utgångstid, en hastighetsgräns per kund bromsar botarna, och bekräftade ordrar går in i en ström som leveransen bearbetar i sin egen takt.

Steg för steg

Vad som händer, kommando för kommando

  1. 01

    Läs in lagret

    500 enheter går ut till försäljning.

    SET stock:sneaker-x 500
  2. 02

    Håll botarna i schack

    Varje kund får försöka två gånger per 10 sekunder. Botar överskrider det direkt.

    GCRA.LIMIT buy:customer:881 10000 2
  3. 03

    Ta en enhet

    DECR är atomärt. 10 000 samtidiga klick kan aldrig ta mer än 500 enheter.

    DECR stock:sneaker-x
  4. 04

    Håll den i tio minuter

    Reservationen löper ut av sig själv om kassan överges, och en rensare lägger tillbaka enheten.

    SET hold:sneaker-x:order-7781 customer:42 NX EX 600
  5. 05

    Slutsålt hanteras

    När DECR går under noll lämnas enheten tillbaka och kunden ser slutsålt. Lagret går aldrig negativt under någon längre tid.

    INCR stock:sneaker-x
  6. 06

    Lämna ordrar till leveransen

    Betalda ordrar läggs till i en ström. Lagersystemet arbetar sig igenom dem i sin egen takt.

    XADD orders * order 7781 sku sneaker-x customer 42
Där det passar

Verkliga scenarier

Släpp av sneakers och merchandise

Begränsade upplagor säljer slut på sekunder utan att ett enda par överförsäljs.

Biljettförsäljning

Platser reserveras några minuter under kassan och släpps automatiskt om köparen lämnar.

Matleverans och livsmedel

Leveranstider är räknare som minskas atomärt när kunder bokar dem.

Inbyggt

Det här får du

Atomära räknare

DECR och INCR ändrar lagret i ett steg utan race.

DECRINCRBY

Reservationer som löper ut

Reservationer är nycklar med en TTL.

SETNXEX

Botskydd

Gränser per kund med en exakt återförsökstid.

GCRA.LIMIT

Överlämning av ordrar

En ström för leveransen, med konsumentgrupper och kvittenser.

XADDXREADGROUP

Vanliga frågor

Hur återlämnar utgångna reservationer lager?

Utgångna reservationer kan upptäckas via nyckelrymdsnotiser eller en periodisk rensning, som ökar lagerräknaren igen.

Kan jag kontrollera lagret utan att ta något?

Ja. GET returnerar det aktuella antalet. Bara DECR reserverar.

Hur är det med varukorgar med flera artiklar?

Använd MULTI och EXEC, eller en funktion, för att minska flera räknare tillsammans.

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.