Redis ist ein Einzelprozess-Single-Thread-Modus. Es verwendet den Warteschlangenmodus, um gleichzeitigen Zugriff in seriellen Zugriff umzuwandeln, und es besteht keine Konkurrenz zwischen den Verbindungen mehrerer Clients zu Redis .
Der implementierte Code dient hauptsächlich dazu, die Seriennummer eines bestimmten Datenelements zu sperren, um zu verhindern, dass mehrere Threads diese Daten schreiben. (Schließt sich gegenseitig aus) (Empfohlenes Lernen: Redis-Video-Tutorial)
Die derzeit beliebteste verteilte Redis-Sperre ist Redisson Das Prinzip besteht darin, zu verstehen, wie Redis verteilte Sperren verwendet
Prinzipielle Analyse
Was verteilte Sperren lösen müssen, ist eine parallele Sperrfunktion des gleichen Codes; diejenigen, die etwas über verteilte Redis-Sperren erfahren haben, müssen wissen, dass Redis zunächst setnx als verteilte Sperre verwendet und dann auf dieser Grundlage eine geplante Ablaufzeit festlegt.
Tatsächlich werden Leute, die das obige Bild verstehen, verstehen, wo das Problem liegt. Das erste ist das Atomizitätsproblem. Die beiden Operationen von setnx + Ablaufzeit müssen atomar sein, damit dies mit Lua-Skript gelöst werden kann 🎜>
Wie kann dann der Zeitpunkt für die Freigabe der Sperre bestimmt werden?
Egal wie viel Ablaufzeit wir festlegen, es gibt keine Garantie dafür, dass der gesperrte Code während dieses Zeitraums ausgeführt wird, daher ist es nicht gut, diese Zeit festzulegen Wenn Wenn die Ausführung abgeschlossen ist, wird die Sperre nicht aufgehoben. Das Problem besteht darin, dass die Sperre niemals aufgehoben wird, wenn die Maschine in der Mitte der Ausführung ausfällt.Wie funktioniert Redisson? obiges Problem lösen?
Es kapselt den Code auf eine optimierte Weise. Es ist nicht einmal erforderlich, die Ablaufzeit aktiv festzulegen Es hält die Sperre und aktualisiert die Ablaufzeit für 30 Sekunden. Durch dieses Design kann die Sperre beibehalten werden, bis sie aufgehoben wird, und sie kann die Sperre automatisch halten, auch wenn sie nicht mehr vorhanden ist >, und der Client, der die Sperre nicht erhalten kann, wird ständig versuchen, eine Schleife einzuschließenDurch Aufzeichnen der Client-ID der Sperre kann diese als wiedereintrittsfähige Sperre konzipiert werden
Das obige ist der detaillierte Inhalt vonWarum kann Redis verteilte Sperren ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!