Redis liest und schreibt im Speicher, daher ist die Leistung hoch, aber die Daten im Speicher gehen beim Neustart des Servers verloren. Um sicherzustellen, dass die Daten nicht verloren gehen, müssen wir die Daten verschieben im Speicher zu Die Daten werden auf der Festplatte gespeichert, sodass die Originaldaten beim Neustart von Redis von der Festplatte wiederhergestellt werden können. Der gesamte Vorgang wird als Redis-Persistenz bezeichnet.
Redis-Persistenz ist auch einer der Hauptunterschiede zwischen Redis und Memcached , denn Memcached ist es nicht mit Persistenzfunktion.
1. Mehrere Persistenzmethoden
Redis-Persistenz verfügt über die folgenden drei Methoden:
Snapshot-Methode (RDB, Redis DataBase) speichert die Speicherdaten Ein bestimmter Moment wird in binärer Form auf die Festplatte geschrieben.
Der Dateianhängemodus (AOF, Append Only File) zeichnet alle Betriebsbefehle auf und hängt sie in Form von Text an die Datei an Hybrid-Persistenzmethode, eine neue Methode, die nach Redis 4.0 hinzugefügt wurde. Beim Schreiben werden die aktuellen Daten zunächst in Form von RDB gespeichert die Datei im AOF-Format, was nicht nur die Geschwindigkeit des Redis-Neustarts gewährleisten, sondern auch das Risiko eines Datenverlusts verringern kann.
Da jede Persistenzlösung spezifische Nutzungsszenarien hat, beginnen wir mit der RDB-Persistenz.
2. Einführung in RDBRDB (Redis DataBase) ist der Prozess des Schreibens eines Speicher-Snapshots (Snapshot) zu einem bestimmten Zeitpunkt in binärer Form auf die Festplatte.
3. PersistenzauslösungEs gibt zwei Arten von Persistenzauslösungsmethoden für RDB: eine ist die manuelle Auslösung und die andere ist die automatische Auslösung.
1) Manuelles Auslösen
Es gibt zwei Vorgänge, die die Persistenz manuell auslösen: save und bgsave. Der Hauptunterschied zwischen ihnen besteht darin, ob die Ausführung des Redis-Hauptthreads blockiert werden soll.
① SpeicherbefehlDas Ausführen des Speicherbefehls im Client löst die Persistenz von Redis aus, versetzt Redis aber gleichzeitig auch in einen blockierenden Zustand bis Die RDB bleibt erhalten, bis sie abgeschlossen ist. Daher muss sie in einer Produktionsumgebung mit Vorsicht verwendet werden. Der Befehl
Speichern wird wie folgt verwendet:
Wie aus dem Bild ersichtlich ist, wird nach Ausführung des Befehls die Änderungszeit der persistenten Datei geändert
Änderungen, was bedeutet, dass save
die RDB-Persistenz erfolgreich ausgelöst hat. dump.rdb
Befehlsausführungsprozess speichern, wie unten gezeigt: save
bgsave (Hintergrundspeicherung) ist beides im Hintergrund Der größte Unterschied zwischen ihm und dem Speicherbefehl besteht darin, dass bgsave einen untergeordneten Prozess forkt (), um eine Persistenz durchzuführen. Während des gesamten Prozesses gibt es nur eine kurze Blockierung, wenn fork () den untergeordneten Prozess durchführt Der Redis-Hauptprozess kann auf Anfragen anderer Clients reagieren. Im Vergleich zum Speicherbefehl, der den gesamten Prozess blockiert, ist der Befehl bgsave für uns offensichtlich besser geeignet. Der Befehl
bgsave wird wie in der Abbildung unten gezeigt verwendet:
Der Ausführungsprozess von bgsave ist wie in der Abbildung unten dargestellt:
2) Automatische Auslösung
Nachdem wir über die manuelle Auslösemethode von RDB gesprochen haben, schauen wir uns an, wie man die RDB-Persistenz automatisch auslöst.
Die automatische RDB-Persistenz tritt hauptsächlich in den folgenden Situationen auf.m n speichern bedeutet, dass die Persistenz automatisch ausgelöst wird, wenn sich n Tasten innerhalb von m Sekunden ändern.
Die Parameter m und n sind in der Redis-Konfigurationsdatei zu finden. Save 60 1 gibt beispielsweise an, dass die RDB-Persistenz ausgelöst wird, wenn sich mindestens ein Schlüssel innerhalb von 60 Sekunden ändert.Persistenz automatisch auslösen. Das Wesentliche ist, dass Redis automatisch einen bgsave-Befehl ausführt, wenn die festgelegten Triggerbedingungen erfüllt sind.
Hinweis: Beim Festlegen mehrerer save m n-Befehle wird die Persistenz ausgelöst, wenn eine Bedingung erfüllt ist.
Zum Beispiel richten wir die folgenden zwei save m n-Befehle ein:
save 60 10save 600 1
Wenn sich der Redis-Schlüsselwert innerhalb von 60 Sekunden zehnmal ändert, wird die Persistenz ausgelöst Wenn sich der Wert weniger als zehnmal ändert, ermittelt Redis, ob der Redis-Schlüsselwert innerhalb von 600 Sekunden mindestens einmal geändert wurde. Wenn dies der Fall ist, wird die Persistenz ausgelöst.
② Flushallflushall 命令用于清空 Redis 数据库,在生产环境下一定慎用,当 Redis 执行了 flushall 命令之后,则会触发自动持久化,把 RDB 文件清空。 执行结果如下图所示: ③ 主从同步触发 在 Redis 主从复制中,当从节点执行全量复制操作时,主节点会执行 4.配置说明 合理的设置 RDB 的配置,可以保障 Redis 高效且稳定的运行,下面一起来看 RDB 的配置项都有哪些? RDB 配置参数可以在 Redis 的配置文件中找见,具体内容如下: 其中比较重要的参数如下列表: ① save 参数 它是用来配置触发 RDB 持久化条件的参数,满足保存条件时将会把数据持久化到硬盘。 save 900 1:表示 900 秒内如果至少有 1 个 key 值变化,则把数据持久化到硬盘;save 300 10:表示 300 秒内如果至少有 10 个 key 值变化,则把数据持久化到硬盘;save 60 10000:表示 60 秒内如果至少有 10000 个 key 值变化,则把数据持久化到硬盘。 ② rdbcompression 参数 它的默认值是 yes 表示开启 RDB 文件压缩,Redis 会采用 LZF 算法进行压缩。如果不想消耗 CPU 性能来进行文件压缩的话,可以设置为关闭此功能,这样的缺点是需要更多的磁盘空间来保存文件。 ③ rdbchecksum 参数 它的默认值为 yes 表示写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。 5.配置查询 Redis 中可以使用命令查询当前配置参数。查询命令的格式为: 6.配置设置 设置 RDB 的配置,可以通过以下两种方式: ● 手动修改 Redis 配置文件; ● 使用命令行设置,例如,使用 注意:手动修改 Redis 配置文件的方式是全局生效的,即重启 Redis 服务器设置参数也不会丢失,而使用命令修改的方式,在 Redis 重启之后就会丢失。但手动修改 Redis 配置文件,想要立即生效需要重启 Redis 服务器,而命令的方式则不需要重启 Redis 服务器。 小贴士:Redis 的配置文件位于 Redis 安装目录的根路径下,默认名称为 redis.conf。 7.RDB 文件恢复 当 Redis 服务器启动时,如果 Redis 根目录存在 RDB 文件 dump.rdb,Redis 就会自动加载 RDB 文件恢复持久化数据。 如果根目录没有 dump.rdb 文件,请先将 dump.rdb 文件移动到 Redis 的根目录。 验证 RDB 文件是否被加载 Redis 在启动时有日志信息,会显示是否加载了 RDB 文件,我们执行 Redis 启动命令: 小贴士:Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。 8.RDB 优缺点 1)RDB 优点 ● RDB 的内容为二进制的数据,占用内存更小,更紧凑,更适合做为备份文件; ● RDB ist sehr nützlich für die Notfallwiederherstellung. Es handelt sich um eine kompakte Datei, die für die Wiederherstellung von Redis-Diensten schneller übertragen werden kann. ● RDB kann die Ausführungsgeschwindigkeit von Redis erheblich steigern Da der Redis-Hauptprozess jedes Mal einen untergeordneten Prozess forkt (), um die Daten auf der Festplatte beizubehalten, führt der Redis-Hauptprozess keine Vorgänge wie Festplatten-E/A und AOF aus Formatdateien Im Vergleich können RDB-Dateien schneller neu gestartet werden. 2) Nachteile von RDB ● Da RDB Daten nur für einen bestimmten Zeitraum speichern kann, gehen die Redis-Daten für einen bestimmten Zeitraum verloren, wenn der Redis-Dienst versehentlich auf halbem Weg beendet wird ; ● RDB erfordert häufiges fork(), um es mithilfe untergeordneter Prozesse auf der Festplatte beizubehalten. Fork() kann zeitaufwändig sein, wenn der Datensatz groß ist, und kann dazu führen, dass Redis die Clients für einige Millisekunden oder sogar eine Sekunde nicht mehr bedient, wenn der Datensatz groß und die CPU-Leistung schlecht ist. Das Deaktivieren der Persistenz kann die Ausführungseffizienz von Redis verbessern, Sie können den Client verbinden und In diesem Artikel können wir erfahren, dass die RDB-Persistenz in zwei Methoden unterteilt ist: manuelles Auslösen und automatisches Auslösen. Der Vorteil besteht darin, dass die Speicherdatei klein ist und die Datenwiederherstellung beim Start von Redis schneller erfolgt Daten. Das Wiederherstellen von RDB-Dateien ist ebenfalls sehr einfach. Sie müssen die RDB-Dateien nur im Stammverzeichnis von Redis ablegen, und die Daten werden beim Start von Redis automatisch geladen und wiederhergestellt. Weitere Informationen zu Redis finden Sie in der Spalte Das obige ist der detaillierte Inhalt vonMehrere Möglichkeiten der Redis-Persistenz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!bgsave
命令,并将 RDB 文件发送给从节点,该过程会自动触发 Redis 持久化。# RDB 保存的条件
save 900 1
save 300 10
save 60 10000
# bgsave 失败之后,是否停止持久化数据到磁盘,yes 表示停止持久化,no 表示忽略错误继续写文件。
stop-writes-on-bgsave-error yes
# RDB 文件压缩
rdbcompression yes
# 写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。
rdbchecksum yes
# RDB 文件名
dbfilename dump.rdb
# RDB 文件目录
dir ./
默认配置说明如下:config get xxx
,例如,想要获取 RDB 文件的存储名称设置,可以使用 config get dbfilename
,执行效果如下图所示:
查询 RDB 的文件目录,可使用命令 config get dir
,执行效果如下图所示:config set dir "/usr/data"
就是用于修改 RDB 的存储目录。src/redis-server redis.conf
,如下图所示:
从日志上可以看出, Redis 服务在启动时已经正常加载了 RDB 文件。<span style="background-color: rgb(253, 234, 218); color: rgb(255, 0, 0);">config set save ""</span>
Befehl zum Deaktivieren der Redis-Persistenz, wie in der folgenden Abbildung dargestellt: