Heim >Datenbank >Redis >Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

coldplay.xixi
coldplay.xixinach vorne
2021-02-23 09:54:222120Durchsuche

Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

Empfohlen (kostenlos): Redis-Tutorial

Artikelverzeichnis

  • 1. Einführung in Redis-Veröffentlichung und -Abonnement
  • 3. Transaktionen in Redis
  • 4. Übertragungsfunktion – Redis-Transaktionsdemonstration
  • 5. Übertragungsfunktion aktualisierte Version – ansehen
  • 6. Transaktionsfehlerbehandlung
  • Geschäftslogikfehler
    • Syntaxfehler
    7. Redis-Persistenz
  • RDB-Persistenz. AOF-Persistenz Der Abonnent (sub) empfängt die Nachricht. Redis-Kunden können eine beliebige Anzahl von Kanälen abonnieren.
    Anwendungsszenarien:

Erstellen Sie ein Echtzeit-Messaging-System, wie gewöhnlicher Instant-Chat, Gruppenchat und andere Funktionen. ②Auf einer Blog-Website gibt es n Fans, die Sie abonniert haben. Wenn Sie einen neuen Artikel veröffentlichen, können Sie Push-Nachrichten an die Fans senden.

WeChat-Modus für öffentliche Konten.

Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

2. Redis-Veröffentlichungs- und Abonnementdemonstration

Veröffentlichungs- und Abonnementsyntax

    Kanal abonnieren:
  • 构建实时消息系统,比如普通的即时聊天,群聊等功能。
  • ②在一个博客网站中,有n多个粉丝订阅了你,当你发布新文章,就可以推送消息给粉丝们。
  • 微信公众号模式

二、Redis发布订阅演示

发布订阅语法
订阅频道:

  • subscribe channel1 [channel2 ...]     订阅给定的一个或多个频道的信息

  • psubscribe pattern1 [pattern2 ...]    订阅一个或多个符合给定模式的频道。
    Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis
    发布频道:

  • publish channel message           将信息发送到指定的频道。
    Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis
    Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis
    退订频道:

  • unsubscribe channel1 [ channel2 ...]    指退订给定的频道。

  • punsubscribe pattern1 [pattern2 ...]   退订所有给定模式的频道。
    Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

三、Redis中的事务

Redis 事务可以一次执行多个命令,(按顺序地串行化执行,执行中不会被其它命令插入,不许加塞)

事务应用场景:

  • 商品秒杀
  • 转账

两个特点:

  • Redis会将一个事务中的所有命令序列化,然后按顺序执行(任意命令执行失败,其余的命令依然被执行)
  • 执行中不会被其它命令插入,不许出现加赛行为。

一个事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务。

事务相关命令:
multi      标记一个事务块的开始。
exec      执行所有事务块内的命令。
discard     取消事务,放弃执行事务块内的所有命令。
watch key    监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。
unwatch     取消watch命令对所有key的监视。

四、转账功能-Redis事务演示

需求:转帐功能,A向B帐号转帐50元。

  • 转账前A有80元,B有10元。
  • 转账后A有30元,B有60元。

本例先以multi开始一个事务,然后将多个命令入队到事务中,最后由 exec命令触发事务。

  • 输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行。
  • 直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。
    Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis
    执行exec前,如果发现添加的命令有问题,可以使用discard
Kanal1 [Kanal2...] abonnieren Informationen zu mehreren Kanäle

psubscribe pattern1 [pattern2 ...]  Abonnieren Sie einen oder mehrere Kanäle, die dem angegebenen Muster entsprechen.
Bildbeschreibung hier einfügen
Veröffentlichen Kanal:

🎜Kanal veröffentlichen                            um Down in in in on in Nachrichten | Senden Sie die Nachricht an den angegebenen Kanal.
Bildbeschreibung hier einfügen

Abmelden vom Kanal: 🎜 🎜🎜🎜unsubscribechannel1 [channel2 ...]  Bezieht sich auf die Abmeldung von einem bestimmten Kanal. 🎜🎜🎜🎜punsubscribe pattern1 [pattern2 ...]  Abmelden von allen Kanälen des angegebenen Musters.
Bildbeschreibung hier einfügen🎜🎜🎜🎜 🎜 3. Transaktionen in Redis🎜🎜🎜Redis-Transaktionen können mehrere Befehle gleichzeitig ausführen (serielle Ausführung der Reihe nach, während der Ausführung werden keine anderen Befehle eingefügt und es ist kein Blockieren zulässig)🎜🎜🎜Transaktionsanwendungsszenarien: 🎜🎜🎜 🎜 🎜Product Flash Sale🎜🎜🎜🎜Transfer🎜🎜🎜🎜🎜Zwei Funktionen: 🎜🎜🎜🎜Redis serialisiert alle Befehle in einer Transaktion und führt sie dann der Reihe nach aus (wenn ein Befehl fehlschlägt, werden die verbleibenden Befehle trotzdem ausgeführt ) )🎜🎜Es wird während der Ausführung nicht durch andere Befehle eingefügt und es sind keine zusätzlichen Spiele zulässig. 🎜🎜🎜Eine Transaktion durchläuft vom Start bis zur Ausführung die folgenden drei Phasen: Transaktion starten, Befehl in die Warteschlange stellen und Transaktion ausführen. 🎜🎜🎜Transaktionsbezogene Befehle:🎜
multi   Markieren Sie den Anfang eines Transaktionsblocks.
exec Alle Befehle innerhalb des Transaktionsblocks ausführen.
discard Brechen Sie die Transaktion ab und geben Sie die Ausführung aller Befehle im Transaktionsblock auf.
watch key Überwachen Sie einen (oder mehrere) Schlüssel, wenn dieser (oder diese) Schlüssel durch andere Befehle geändert werden, bevor die Transaktion ausgeführt wird.
unwatch Brechen Sie die Überwachung aller Tasten durch den Befehl watch ab. 🎜🎜🎜4. Übertragungsfunktion – Redis-Transaktionsdemonstration🎜🎜🎜🎜Anforderungen: Übertragungsfunktion, A überweist 50 Yuan auf Konto B. 🎜🎜🎜Vor der Überweisung hatte A 80 Yuan und B 10 Yuan. 🎜🎜Nach der Überweisung hat A 30 Yuan und B 60 Yuan. 🎜🎜🎜🎜Dieses Beispiel startet eine Transaktion mit multi, stellt dann mehrere Befehle in die Transaktion ein und löst schließlich die Transaktion mit dem Befehl exec aus. 🎜🎜🎜Beginnen Sie mit der Eingabe des Multi-Befehls. Die eingegebenen Befehle werden nacheinander in die Befehlswarteschlange eingegeben, aber nicht ausgeführt. 🎜🎜Bis Exec eingegeben wird, führt Redis die Befehle in der vorherigen Befehlswarteschlange nacheinander aus.
Bildbeschreibung hier einfügen
Vorher Wenn Sie beim Ausführen von exec feststellen, dass ein Problem mit dem hinzugefügten Befehl vorliegt, können Sie den Warteschlangenvorgang mit dem Befehl discard abbrechen, ähnlich dem Rollback-Vorgang in MySQL. 5. Aktualisierte Version der Übertragungsfunktion – Uhr 🎜

Die obige Übertragung ist unsicher. Wenn während der Ausführung andere Befehle auf Konto a oder b ausgeführt werden, kann es zu Phantomlesevorgängen kommen. Die Lösung besteht darin, einen Überwachungsbefehl hinzuzufügen, um das Konto zu überwachen, sobald die Transaktion ausgeführt wird Wenn Sie auf Konto a oder b arbeiten, meldet das Programm direkt einen Fehler und führt einen Rollback durch.

Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

Wenn nach der Ausführung des Watch-Befehls zuerst der Befehl exec oder discard ausgeführt wird, ist es nicht erforderlich, unwatch auszuführen Brechen Sie den Überwachungsbefehl ab. Der Schlüssel wird überwacht, da der Befehl exec oder discon die Überwachung automatisch abbricht. execdiscard命令先被执行,就不需要再执行unwatch来取消对key的监视了,因为exec或discard命令会自动取消监视。

六、事务的错误处理

业务逻辑错误

发生业务逻辑错误:只有报错的命令不会被执行,而其它的命令都会执行,不会回滚。
Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

语法错误

发生语法错误:执行时整个的所有队列都会被取消。
Erläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis

七、Redis持久化

数据存放在内存:高效、但断电内存数据会丢失。
数据存放在硬盘:读写速度慢于内存、但断电数据不会丢失。

RDB持久化

RDB是redis的默认持久化机制。RDB相当于照快照,保存的是数据的一种状态。(几十G的数据可以保存为几KB的快照)

快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb(存在redis.conf文件中)。

优点:

  • 快照保存数据极快、还原数据极快
  • 适用于灾难备份

缺点:

  • 小内存机器不适合使用,RDB机制符合要求就会照快照,占内存。

AOF持久化

由于快照方式是在一定间隔时间做一次的,所以如果redis 意外宕机,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用AOF(Append-Only File)持久化方式。

appendonly yes 命令可以启用 AOF 持久化方式。

有三种方式如下(默认是:每秒 fsync 一次)

  • appendfsync always     收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
  • appendfsync everysec    每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
  • appendfsync no
6. Behandlung von Transaktionsfehlern


Geschäftslogikfehler

Ein Geschäftslogikfehler tritt auf: Nur der Befehl, der den Fehler meldet, wird nicht ausgeführt, andere Befehle werden jedoch ausgeführt und nicht zurückgesetzt. Bildbeschreibung hier einfügen

Syntaxfehler

🎜🎜Ein Syntaxfehler ist aufgetreten: Alle Warteschlangen werden während der Ausführung abgebrochen. 🎜🎜Bildbeschreibung hier einfügen🎜🎜🎜 7. Redis-Persistenz 🎜🎜🎜Daten werden im Speicher gespeichert: effizient, aber Speicherdaten gehen verloren, wenn der Strom ausgeschaltet wird. 🎜 Daten werden auf der Festplatte gespeichert: Die Lese- und Schreibgeschwindigkeit ist langsamer als die des Speichers, aber die Daten gehen nicht verloren, wenn der Strom ausgeschaltet wird. 🎜🎜🎜RDB-Persistenz🎜🎜🎜RDB ist der Standard-Persistenzmechanismus von Redis. RDB entspricht der Erstellung eines Snapshots, der einen Datenstatus speichert. (Dutzende Gigabyte an Daten können als Snapshots von mehreren KB gespeichert werden) 🎜🎜Snapshots sind die Standard-Persistenzmethode. Bei dieser Methode werden die Daten im Speicher in Form eines Snapshots in eine Binärdatei geschrieben. Der Standarddateiname lautet dump.rdb (der in der Datei redis.conf gespeichert ist). 🎜🎜Vorteile: 🎜
  • Snapshots speichern Daten sehr schnell und stellen Daten sehr schnell wieder her🎜
  • Geeignet für Notfall-Backups🎜🎜🎜Nachteile: 🎜
    • Kleinspeichermaschinen sind nicht für den Einsatz geeignet, RDB-Mechanismus Wenn die Anforderungen erfüllt sind, wird ein Snapshot erstellt, der Speicher belegt. 🎜🎜🎜🎜AOF-Persistenz🎜🎜🎜Da die Snapshot-Methode in einem bestimmten Intervall durchgeführt wird, gehen alle Änderungen nach dem letzten Snapshot verloren, wenn Redis unerwartet ausfällt. Wenn die Anwendung erfordert, dass keine Änderungen verloren gehen können, kann die AOF-Persistenzmethode (Append-Only File) verwendet werden. 🎜🎜Der Befehl appendonly yes kann die AOF-Persistenz aktivieren. 🎜🎜Es gibt drei Möglichkeiten wie folgt (Standard: fsync einmal pro Sekunde) 🎜
      • appendfsync immer   Schreiben Sie den Schreibbefehl sofort nach Erhalt des Schreibbefehls auf die Festplatte, was am langsamsten ist , stellt aber vollständige Persistenz sicher 🎜
      • appendfsync everysec   Schreibt einmal pro Sekunde auf die Festplatte, was einen guten Kompromiss zwischen Leistung und Persistenz darstellt🎜
      • appendfsync no    Völlig abhängig von der Betriebssystem, die beste Leistung, aber die Persistenz ist nicht garantiert 🎜🎜🎜🎜Vorteile: 🎜🎜 AOF hat eine bessere Persistenz als die Snapshot-Methode, denn bei Verwendung der AOF-Persistenzmethode: 🎜redis schreibt alle empfangenen Befehle über die an die Datei an Schreibfunktion (Standard ist appendonly.aof). Beim Neustart von Redis wird der Inhalt der gesamten Datenbank im Speicher wiederhergestellt, indem die in der Datei gespeicherten Schreibbefehle erneut ausgeführt werden. 🎜🎜🎜🎜Nachteile: 🎜🎜🎜Die AOF-Methode bringt auch ein weiteres Problem mit sich. Die persistente Datei wird immer größer und 🎜belegt die Festplatte🎜. Wenn wir beispielsweise den Befehl incr test 100 Mal aufrufen, müssen alle 100 Befehle in der Datei gespeichert werden. Tatsächlich sind 99 davon redundant. 🎜

Das obige ist der detaillierte Inhalt vonErläutern Sie die Veröffentlichungs- und Abonnementdemonstration, die Transaktionsdemonstration und die Persistenz von Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen