Lassen Sie uns zunächst kurz das Wesentliche der Redis-Transaktion vorstellen:
Das Wesentliche der Redis-Transaktion ist eine Reihe von Befehlen. Transaktionen unterstützen die gleichzeitige Ausführung mehrerer Befehle und alle Befehle in einer Transaktion werden serialisiert. Während des Transaktionsausführungsprozesses werden die Befehle in der Warteschlange serialisiert und der Reihe nach ausgeführt, und von anderen Clients übermittelte Befehlsanforderungen werden nicht in die Befehlssequenz für die Transaktionsausführung eingefügt.
Zusammenfassend: Eine Redis-Transaktion ist eine einmalige, sequentielle und exklusive Ausführung einer Reihe von Befehlen in einer Warteschlange.
Redis-Transaktionen haben kein Konzept der Isolationsstufe:
Stapeloperationen werden vor dem Senden des EXEC-Befehls in den Warteschlangencache gestellt und nicht tatsächlich ausgeführt. Daher gibt es innerhalb der Transaktion keine Abfrage, um die Aktualisierungen in der Transaktion anzuzeigen. außerhalb der Transaktion Die Abfrage ist nicht sichtbar.
Redis garantiert keine Atomizität:
In Redis wird ein einzelner Befehl atomar ausgeführt, Transaktionen garantieren jedoch keine Atomizität und es gibt kein Rollback. Wenn ein Befehl in der Transaktion nicht ausgeführt werden kann, werden die verbleibenden Befehle trotzdem ausgeführt.
Drei Phasen von Redis-Transaktionen:
Transaktionsbefehl starten, Warteschlange zum Ausführen der Transaktion
Redis-Transaktionsbezogene Befehle:
Schlüssel1, Schlüssel2 überwachen...: Überwachen Sie einen oder mehrere Schlüssel, bevor die Transaktion ausgeführt wird Wenn der Schlüssel durch andere Befehle geändert wird, wird die Transaktion unterbrochen (ähnlich wie beim optimistischen Sperren). Multi: Markiert den Anfang eines Transaktionsblocks (in der Warteschlange). hinzugefügte Überwachungssperre wird aufgehoben) Verwerfen: Transaktion abbrechen, alle Befehle im Transaktionsblock verwerfen
Überwachung aufheben: Überwachung aller Schlüssel durch Überwachung abbrechen
Redis-Transaktionsanwendungsfall:
(1) Normale Ausführung
( 2) Brechen Sie die Transaktion ab. all Keiner der Befehle wird ausgeführt (4) Wenn in der Transaktionswarteschlange ein Syntaxfehler vorliegt (ähnlich der 1/0-Laufzeitausnahme von Java), werden bei der Ausführung des EXEC-Befehls andere korrekte Befehle ausgeführt und der Fehler Der Befehl hat eine Ausnahme ausgelöst. (5) Verwenden Sie die UhrFall 2: Verwenden Sie die Uhr, um den Kontostand zu ermitteln Führen Sie nach dem Öffnen der Transaktion (mit 1 markiert) den Vorgang in Anmerkung 2 in einem neuen Fenster aus, ändern Sie den Wert des Kontostands, simulieren Sie andere Clients, die die von der Uhr während der Transaktionsausführung überwachten Daten ändern, und führen Sie dann den Befehl nach Anmerkung 1 aus. Nach der Ausführung von EXEC wurde die Transaktion nicht erfolgreich ausgeführt.
Sobald EXEC ausgeführt wird, um die Ausführung einer Transaktion zu starten, wird die Überwachung von Variablen durch WARCH abgebrochen, unabhängig davon, ob die Transaktion erfolgreich ausgeführt wurde.
Wenn also die Transaktionsausführung fehlschlägt, müssen Sie den WATCH-Befehl erneut ausführen, um die Variablen zu überwachen und eine neue Transaktion für den Betrieb zu starten. Zusammenfassung: Die Überwachungsanweisung ähnelt dem optimistischen Sperren. Wenn eine Transaktion festgeschrieben wird und der Wert eines beliebigen SCHLÜSSELS unter den mehreren von der Überwachung überwachten SCHLÜSSELN von anderen Clients geändert wurde, wird die Transaktionswarteschlange nicht geändert Verwenden Sie EXEC, um die Transaktion auszuführen, und geben Sie eine Nullmulti-Massenantwort zurück, um den Aufrufer darüber zu informieren, dass die Transaktionsausführung fehlgeschlagen ist.Verwandte Empfehlungen:
Redis-Datenbank-TutorialDas obige ist der detaillierte Inhalt vonTeilen von Anwendungsfällen für Redis-Transaktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!