Redis Pit Prevention Guide – Transaktionen
Verwandte Befehlseinführung:
(Lernvideo-Sharing: Redis-Video-Tutorial)
Hinweis:
------MULTI, EXEC, DISCARD sind diejenigen, die Transaktionen explizit öffnen und steuern Häufig verwendete Befehle können mit BEGAIN, COMMIT und ROLLBACK in relationalen Datenbanken verglichen werden (tatsächlich gibt es eine große Lücke). verursacht durch Transaktions-Parallelitätsproblem (einfach als Sperren des Schlüssels verstanden);
Redis-Transaktion
MULTI, EXEC, DISCARD und WATCH sind die Grundlage von Redis-Transaktionen. Sie werden zum expliziten Starten und Steuern einer Transaktion verwendet und ermöglichen die Ausführung einer Reihe von Befehlen in einem Schritt. Und bietet zwei wichtige Garantien:
Alle Befehle in der Transaktion werden serialisiert und der Reihe nach ausgeführt. Während der Ausführung einer Redis-Transaktion erfolgt keine Anfrage eines anderen Clients. Dadurch wird sichergestellt, dass die Befehlswarteschlange als einzelne atomare Operation ausgeführt wird.
Befehle in der Warteschlange werden entweder alle verarbeitet oder ignoriert. Der EXEC-Befehl löst daher die Ausführung aller Befehle in der Transaktion aus, wenn die Verbindung des Clients mit dem Server vor dem Aufruf des MULTI-Befehls unterbrochen wird Dann werden alle Befehle ausgeführt.
Gleichzeitig verwendet Redis AOF (Append-Only File), um Transaktionen mithilfe eines zusätzlichen Schreibvorgangs auf die Festplatte zu schreiben. Wenn eine Ausfallzeit oder ein Prozessabsturz auftritt, können Sie das Redis-Check-Aof-Tool verwenden, um die Nur-Anhänge-Datei zu reparieren, sodass der Dienst normal starten und einige Vorgänge wieder aufnehmen kann.
Verwendung
Verwenden Sie den MULTI-Befehl, um explizit eine Redis-Transaktion zu starten. Dieser Befehl antwortet immer mit OK. Zu diesem Zeitpunkt kann der Benutzer mehrere Befehle ausgeben, und Redis führt diese Befehle nicht aus, sondern stellt sie in die Warteschlange. Nach dem Aufruf von EXEC werden alle Befehle ausgeführt. Durch den Aufruf von DISCARD kann die Befehlswarteschlange in der Transaktion geleert und die Transaktion beendet werden.
Das folgende Beispiel erhöht atomar die Tasten foo und bar.
>MULTI OK >INCR foo QUEUED >INCR bar QUEUED >EXEC 1)(整数)1 2)(整数)1
Wie aus der obigen Befehlsausführung ersichtlich ist, gibt EXEC ein Array zurück, wobei jedes Element das Rückgabeergebnis eines einzelnen Befehls in der Transaktion ist und die Reihenfolge mit der Reihenfolge übereinstimmt, in der der Befehl ausgegeben wurde. Wenn eine Redis-Verbindung im Kontext einer MULTI-Anfrage steht, werden alle Befehle mit der Zeichenfolge QUEUED (aus Sicht des Redis-Protokolls als Statusantwort gesendet) beantwortet und in der Befehlswarteschlange eingereiht. Nur wenn EXEC aufgerufen wird, werden die in der Warteschlange befindlichen Befehle ausgeführt und das tatsächliche Ergebnis wird zu diesem Zeitpunkt zurückgegeben.
Fehler in Transaktionen
Während einer Transaktion können zwei Arten von Befehlsfehlern auftreten:
Vor dem Aufruf des EXEC-Befehls ist ein Fehler aufgetreten (Befehlswarteschlange fehlgeschlagen). Der Befehl kann beispielsweise Syntaxfehler aufweisen (falsche Anzahl von Parametern, falscher Befehlsname usw.) oder es liegen bestimmte kritische Bedingungen vor, z. B. unzureichender Speicher (wenn der Server über Speicherbeschränkungen verfügt, die die maxmemory-Direktive verwenden).
Der Client erkennt den ersten Fehler vor dem EXEC-Aufruf. Durch Überprüfen der Statusantwort des in der Warteschlange befindlichen Befehls (***Hinweis: Dies bezieht sich auf die Statusantwort in der Warteschlange, nicht auf das Ausführungsergebnis***). Wenn der Befehl mit „QUEUED“ antwortet, wurde er korrekt in die Warteschlange gestellt, andernfalls gibt Redis eine zurück Fehler. Wenn beim Einreihen eines Befehls in die Warteschlange ein Fehler auftritt, brechen die meisten Clients die Transaktion ab und leeren die Befehlswarteschlange. Allerdings:
Vor Redis 2.6.5 führte der Client in diesem Fall nach dem Aufruf des EXEC-Befehls eine Teilmenge der Befehle aus (diejenigen, die erfolgreich in die Warteschlange gestellt wurden) und ignorierte frühere Fehler. Ab Redis 2.6.5 merkt sich der Server Fehler, die während der Anhäufung von Befehlen aufgetreten sind. Wenn der EXEC-Befehl aufgerufen wird, verweigert er die Ausführung der Transaktion und gibt diese Fehler zurück, während die Befehlswarteschlange automatisch geleert wird. Ein Beispiel lautet wie folgt:
>MULTI +OK >INCR a b c -ERR wrong number of arguments for 'incr' command
Dies ist auf einen Syntaxfehler im INCR-Befehl zurückzuführen, der vor dem Aufruf von EXEC und dem Beenden der Transaktion erkannt wird (Version 2.6.5+).
Der Fehler trat nach dem Aufruf des EXEC-Befehls auf. Zum Beispiel die Verwendung eines falschen Werts, um eine Operation für einen Schlüssel auszuführen (z. B. das Aufrufen einer Listenoperation für einen String-Wert).
Fehler, die nach der Ausführung des EXEC-Befehls auftreten, werden nicht speziell behandelt: auch wenn einige Befehle in der Wenn die Transaktion nicht ausgeführt werden kann, werden andere Befehle weiterhin normal ausgeführt.
Das Beispiel sieht wie folgt aus:
>MULTI +OK >SET a 3 +QUEUED >LPOP a +QUEUED >EXEC *2 +OK -ERR Operation against a key holding the wrong kind of value
EXEC gibt ein String-Array zurück, das zwei Elemente enthält, ein Element ist OK, das andere ist -ERR…. Ob Fehler ordnungsgemäß an Benutzer zurückgegeben werden können, hängt von der Implementierung der Clientbibliothek (z. B. Spring-data-redis.redisTemplate) ab. Es ist zu beachten, dass selbst wenn der Befehl fehlschlägt, alle anderen Befehle in der Warteschlange verarbeitet werden – Redis stoppt die Verarbeitung des Befehls nicht.
Redis-Transaktionen unterstützen kein Rollback (Hervorhebung)
Tatsächlich können Redis-Befehle während der Transaktionsausführung fehlschlagen, die verbleibenden Befehle werden jedoch weiterhin anstelle von Rollback (Transaktions-Rollback) ausgeführt. Wenn Sie relationale Datenbanken verwendet haben, kommt Ihnen diese Situation möglicherweise seltsam vor. Es gibt jedoch eine gute Erklärung für diese Situation:
Redis命令可能会执行失败,仅仅是由于错误的语法被调用(命令排队时检测不出来的错误),或者使用错误的数据类型操作某个Key: 这意味着,实际上失败的命令都是编程错误造成的,都是开发中能够被检测出来的,生产环境中不应该存在。(这番话,彻底甩锅,“都是你们自己编程错误,与我们无关”。)由于不必支持Rollback,Redis内部简洁并且更加高效。
“如果错误就是发生了呢?”这是一个反对Redis观点的争论。然而应该指出的是,通常情况下,回滚并不能挽救编程错误。鉴于没有人能够挽救程序员的错误,并且Redis命令失败所需的错误类型不太可能进入生产环境,所以我们选择了不支持错误回滚(Rollback)这种更简单快捷的方法。
清除命令队列
DISCARD被用来中止事务。事务中的所有命令将不会被执行,连接将恢复正常状态。
> SET foo 1 OK > MULTI OK > INCR foo QUEUED > DISCARD OK > GET foo "1"
相关推荐:redis数据库教程
Das obige ist der detaillierte Inhalt vonRedis Pit Prevention Guide – Transaktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

So löschen Sie Redis -Daten: Verwenden Sie den Befehl Flushall, um alle Schlüsselwerte zu löschen. Verwenden Sie den Befehl flushdb, um den Schlüsselwert der aktuell ausgewählten Datenbank zu löschen. Verwenden Sie SELECT, um Datenbanken zu wechseln, und löschen Sie dann FlushDB, um mehrere Datenbanken zu löschen. Verwenden Sie den Befehl del, um einen bestimmten Schlüssel zu löschen. Verwenden Sie das Redis-Cli-Tool, um die Daten zu löschen.

Um eine Warteschlange aus Redis zu lesen, müssen Sie den Warteschlangenname erhalten, die Elemente mit dem Befehl LPOP lesen und die leere Warteschlange verarbeiten. Die spezifischen Schritte sind wie folgt: Holen Sie sich den Warteschlangenname: Nennen Sie ihn mit dem Präfix von "Warteschlange:" wie "Warteschlangen: My-Queue". Verwenden Sie den Befehl LPOP: Wischen Sie das Element aus dem Kopf der Warteschlange aus und geben Sie seinen Wert zurück, z. B. die LPOP-Warteschlange: my-queue. Verarbeitung leerer Warteschlangen: Wenn die Warteschlange leer ist, gibt LPOP NIL zurück, und Sie können überprüfen, ob die Warteschlange existiert, bevor Sie das Element lesen.

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

Um die Operationen zu sperren, muss die Sperre durch den Befehl setNX erfasst werden und dann den Befehl Ablauf verwenden, um die Ablaufzeit festzulegen. Die spezifischen Schritte sind: (1) Verwenden Sie den Befehl setNX, um zu versuchen, ein Schlüsselwertpaar festzulegen; (2) Verwenden Sie den Befehl Ablauf, um die Ablaufzeit für die Sperre festzulegen. (3) Verwenden Sie den Befehl Del, um die Sperre zu löschen, wenn die Sperre nicht mehr benötigt wird.

Der beste Weg, um Redis -Quellcode zu verstehen, besteht darin, Schritt für Schritt zu gehen: Machen Sie sich mit den Grundlagen von Redis vertraut. Wählen Sie ein bestimmtes Modul oder eine bestimmte Funktion als Ausgangspunkt. Beginnen Sie mit dem Einstiegspunkt des Moduls oder der Funktion und sehen Sie sich die Codezeile nach Zeile an. Zeigen Sie den Code über die Funktionsaufrufkette an. Kennen Sie die von Redis verwendeten Datenstrukturen. Identifizieren Sie den von Redis verwendeten Algorithmus.

Verwenden Sie das Redis-Befehlszeilen-Tool (REDIS-CLI), um Redis in folgenden Schritten zu verwalten und zu betreiben: Stellen Sie die Adresse und den Port an, um die Adresse und den Port zu stellen. Senden Sie Befehle mit dem Befehlsnamen und den Parametern an den Server. Verwenden Sie den Befehl Hilfe, um Hilfeinformationen für einen bestimmten Befehl anzuzeigen. Verwenden Sie den Befehl zum Beenden, um das Befehlszeilenwerkzeug zu beenden.

Zu den Ursachen für Datenverluste gehören Speicherausfälle, Stromausfälle, menschliche Fehler und Hardwarefehler. Die Lösungen sind: 1. Speichern Sie Daten auf Festplatten mit RDB oder AOF Persistenz; 2. Kopieren Sie auf mehrere Server, um eine hohe Verfügbarkeit zu erhalten. 3. Ha mit Redis Sentinel oder Redis Cluster; 4. Erstellen Sie Schnappschüsse, um Daten zu sichern. 5. Implementieren Sie Best Practices wie Persistenz, Replikation, Schnappschüsse, Überwachung und Sicherheitsmaßnahmen.
