Eingehende Untersuchung des Persistenzprinzips von Redis
Redis ist eine In-Memory-Datenbank Um die Persistenz von Daten sicherzustellen, stellt Redis zwei Persistenzmethoden bereit: RDB und AOF.
Redis ist eine In-Memory-Datenbank bietet zwei Persistenzmethoden, RDB und AOF. Schauen wir uns die Implementierungsprinzipien dieser beiden Persistenzmethoden separat an.
RDB wird durch Snapshots vervollständigt. Wenn bestimmte Bedingungen erfüllt sind, speichert Redis die Daten automatisch im Speicher auf der Festplatte.
Führen Sie den Master-Slave-Replikationsvorgang aus (zuerst Mal)
(Kostenloses Lernvideo-Tutorial empfohlen: MySQL-Video-Tutorial)
Vor- und Nachteile von RDB
Nachteile: Wenn RDB für die Persistenz verwendet wird, gehen die Daten nach dem letzten Snapshot verloren, wenn Redis plötzlich abnormal beendet wird. Sie können jedoch basierend auf der Kombination automatische Snapshots einrichten, um den Datenverlust zu reduzieren und sicherzustellen, dass er im akzeptablen Bereich liegt. Wenn die Daten wichtiger sind, können Sie die AOF-Methode verwenden. Vorteile: Die Verwendung der RDB-Methode kann die Redis-Leistung maximieren. Während des Snapshot-Prozesses können wir sehen, dass der Hauptprozess nur einen untergeordneten Prozess ausspalten muss , und der Rest Die gesamte Arbeit wird vom untergeordneten Prozess erledigt, und der übergeordnete Prozess muss keine Festplatten-E/A-Vorgänge ausführen. Wenn der Datensatz jedoch groß ist, ist das Forken des untergeordneten Prozesses zeitaufwändig, was dazu führt, dass Redis die Verarbeitung von Anforderungen für einen bestimmten Zeitraum einstellt.# 开启appendonly参数appendonly true# 设置AOF文件位置dir ./# 设置AOF文件名称,默认是appendonly.aofappendfilename appendonly.aof<br/>
Prinzipbild
RESP-ProtokollDer Redis-Client verwendet das RESP-Protokoll für die Kommunikation mit dem Redis-Server. Dieses Protokoll wurde speziell für Redis entwickelt, kann aber auch verwendet werden Wird in anderen C-S-Projekten verwendet.
Leerzeichen: rn unter Linux, n unter WindowsEinfache Zeichenfolge beginnt mit „+“AOF程序接收到命令参数之后,会将其从字符串对象转换成协议内容,再将协议内容追加到AOF缓存中。AOF缓存是在redisServer结构的aof_buf中,新的内容会被追加到aof_buf末尾。aof_buf保持着所有未被写入到AOF文件的协议文本。
将AOF缓存内容写入到AOF文件,并保持到磁盘。 当服务器的常规函数被执行,或者事件处理器被执行的时候,flushAppendOnlyFile函数将会被执行。会有以下两个过程。
AOF一共有三种保存模式
Redis可以在AOF文件过大的时候,在后台(子进程)对AOF文件进行重写。重写之后的新文件,包含恢复当前数据集所需的最小命令集合。重写,并不会对AOF文件进行读取和写入,针对的是数据库中的当前键。
优化前set s1 1set s1 2set s1 3优化后set s1 3<br/>
AOF的重写是通过子进程实现的,因此,主线程是继续工作的,有可能对新的数据进行修改,有可能会导致数据库的数据和重写之后的数据不一致。redis通过增加一个AOF重写缓存来解决这个问题,当fork出子进程之后,新的命令不仅会追加到现有的AOF文件中,还会添加一份数据到这个缓存当中。
Redis创建新的AOF文件之后,会继续将命令添加到原有的AOF文件中,即使数据库突然宕机了,原有的AOF文件和文件内容也不会有损失。而当新的AOF文件创建完毕之后,会直接把旧的替换掉,往新的AOF文件中添加命令。
当子进程在进行重写时,主进程会完成下列工作
这样程序就完成了新旧AOF文件的替换工作。而当处理完成之后,主进程就会继续接受请求。整个重写过程中只有最后的缓存写入和改名替换的操作会导致主进程阻塞,其他时候不会影响redis的正常工作,把AOF重写对redis的性能影响降到最低。
优化触发条件
#当前的AOF文件超过上次重写时AOF文件大小百分几的时候进行重写,如果没有重写过,则以启动时AOF文件的大小为准auto-aof-rewrite-percentage 100#限制允许重写的最小的AOF文件,也就是文件小于这个值的时候不需要进行重写优化auto-aof-rewrite-min-size 64mb<br/>
本文转载自:https://database.51cto.com/art/202002/610825.htm
更多redis知识请关注redis数据库教程栏目。
Das obige ist der detaillierte Inhalt vonEntdecken Sie die Redis-Persistenzprinzipien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!