Geplante Jobs
Derselbe Cronjob läuft auf jeder Instanz, und der Lock sorgt dafür, dass genau eine davon die Arbeit erledigt.
Stellen Sie sicher, dass immer nur ein Worker einen Job ausführt, mit Locks, die von selbst ablaufen und von ihrem Besitzer sicher freigegeben werden.
NX nimmt ihn nur, wenn ihn niemand hält. PX 30000 lässt ihn nach 30 Sekunden ablaufen, falls A ausfällt.
Ein animierter Durchlauf mit echten HotKV-Befehlen und Beispielantworten. Klicken Sie auf einen Schritt, um direkt dorthin zu springen. Befehle und Antworten bleiben auf Englisch, genau so, wie Sie sie in HotKV eingeben und sehen.
Cronjobs auf mehreren Maschinen, Zahlungseinzüge und Cache-Neuaufbauten dürfen nicht zweimal gleichzeitig laufen. Ein Lock ohne Ablaufzeit bleibt für immer gehalten, wenn sein Besitzer abstürzt, und einen Lock mit einem einfachen DEL freizugeben, kann den Lock eines anderen löschen, nachdem Ihrer abgelaufen ist.
SET mit NX und PX erwirbt einen Lock nur, wenn ihn niemand hält, und gibt ihm eine Ablaufzeit, damit ein abgestürzter Besitzer ihn nicht für immer halten kann. Jeder Besitzer speichert ein zufälliges Token als Wert. DELEX mit IFEQ löscht den Lock nur, wenn er noch Ihr Token enthält. Das ist die sichere Freigabe, für die man früher ein Lua-Skript brauchte.
NX nimmt ihn nur, wenn ihn niemand hält. PX 30000 lässt ihn nach 30 Sekunden ablaufen, falls A ausfällt.
SET lock:billing-run tok-a81f NX PX 30000Der Lock ist belegt, daher erhält B nil und überspringt diesen Lauf.
SET lock:billing-run tok-b22c NX PX 30000Nur ein Worker führt den Abrechnungsjob aus.
PTTL lock:billing-runDELEX löscht den Key nur, wenn der Wert noch das Token von A ist.
DELEX lock:billing-run IFEQ tok-a81fWäre A zu langsam gewesen und hielte B jetzt den Lock, ließe die Freigabe von A den Lock von B unberührt.
DELEX lock:billing-run IFEQ tok-staleDerselbe Cronjob läuft auf jeder Instanz, und der Lock sorgt dafür, dass genau eine davon die Arbeit erledigt.
Einzugs- und Erstattungsvorgänge für eine Bestellung werden serialisiert, sodass sie sich nie überschneiden.
Nur eine Anfrage baut einen teuren Cache-Eintrag neu auf, während die anderen warten oder den veralteten Wert ausliefern.
SET NX PX nimmt den Lock nur, wenn er frei ist, mit einem Timeout.
SETNXPXDELEX IFEQ löscht nur, wenn der Wert Ihrem Token entspricht.
DELEXPrüfen Sie die verbleibende Zeit und verlängern Sie sie bei langen Jobs.
PTTLPEXPIREBei großen Werten vergleicht DELEX IFDEQ einen Digest statt des vollständigen Werts.
DIGESTIFDEQWenn Ihr Lock abgelaufen ist und ein anderer Worker ihn übernommen hat, würde ein einfaches DEL dessen Lock löschen. DELEX IFEQ löscht ihn nur, solange er noch Ihr Token enthält.
Länger, als der Job normalerweise dauert. Verlängern Sie bei langen Jobs die Ablaufzeit regelmäßig, solange Sie den Lock noch halten.
Nein. DELEX erledigt Vergleich und Löschen in einem Befehl.
HotKV spricht das Redis-Protokoll, sodass Sie einen bestehenden Client darauf richten und genau diese Befehle ausführen können.