Empfohlen (kostenlos): Redis-Tutorial
Artikelverzeichnis
①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
.
Veröffentlichungs- und Abonnementsyntax
构建实时消息系统
,比如普通的即时聊天,群聊等功能。推送消息
给粉丝们。微信公众号模式
。二、Redis发布订阅演示
发布订阅语法
订阅频道:
subscribe channel1 [channel2 ...]
订阅给定的一个或多个频道的信息
psubscribe pattern1 [pattern2 ...]
订阅一个或多个符合给定模式的频道。
发布频道:
publish channel message
将信息发送到指定的频道。
退订频道:
unsubscribe channel1 [ channel2 ...]
指退订给定的频道。
punsubscribe pattern1 [pattern2 ...]
退订所有给定模式的频道。
三、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
命令触发事务。
discard
Kanal1 [Kanal2...] abonnieren
Informationen zu mehreren Kanäle
psubscribe pattern1 [pattern2 ...]
Abonnieren Sie einen oder mehrere Kanäle, die dem angegebenen Muster entsprechen. 🎜Kanal veröffentlichen
um Down in in in on in Nachrichten | Senden Sie die Nachricht an den angegebenen Kanal.
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.
🎜🎜🎜🎜 🎜 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 mitmulti
, stellt dann mehrere Befehle in die Transaktion ein und löst schließlich die Transaktion mit dem Befehlexec
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.
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 Befehldiscard
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.
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. exec
或discard
命令先被执行,就不需要再执行unwatch
来取消对key的监视了,因为exec或discard命令会自动取消监视。
六、事务的错误处理
业务逻辑错误
发生业务逻辑错误:只有报错的命令不会被执行,而其它的命令都会执行,不会回滚。
语法错误
发生语法错误:执行时整个的所有队列都会被取消。
七、Redis持久化
数据存放在内存:高效、但断电内存数据会丢失。
数据存放在硬盘:读写速度慢于内存、但断电数据不会丢失。
RDB持久化
RDB是redis的默认持久化机制。RDB相当于照快照,保存的是数据的一种状态。(几十G的数据可以保存为几KB的快照)
快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb
(存在redis.conf文件中)。
优点:
缺点:
AOF持久化
由于快照方式是在一定间隔时间做一次的,所以如果redis 意外宕机,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用AOF(Append-Only File)持久化方式。
appendonly yes
命令可以启用 AOF 持久化方式。
有三种方式如下(默认是:每秒 fsync 一次)
appendfsync always
收到写命令就立即写入磁盘,最慢,但是保证完全的持久化appendfsync everysec
每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中appendfsync no
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.
Syntaxfehler
🎜🎜Ein Syntaxfehler ist aufgetreten: Alle Warteschlangen werden während der Ausführung abgebrochen. 🎜🎜🎜🎜🎜 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 lautetdump.rdb
(der in der Datei redis.conf gespeichert ist). 🎜🎜Vorteile: 🎜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!