There are two kinds of persistence (AOF and RDB) in Redis. This article will take you to understand these two kinds of persistence, look at their advantages and disadvantages, and introduce why Redis needs two kinds of persistence. Persistence, hope it helps everyone!
As we all know, Redis provides two persistence methods: AOF and RDB. Let’s start with Let’s briefly review.
SAVE
and the background RDB persistence command BGSAVE
. When executed in the foreground, other Redis commands will be blocked, and when executed in the background , Redis can also continue to process the client's command request. od
command. [Related recommendations: Redis video tutorial]
Appen Only File
, which means the appended persistence method, in which write commands are saved instead of data. aof_buf
buffer in the server status in the AOF protocol format. flushAppendOnlyFile
function is called to write the contents of the aof_buf
buffer to the AOF file. sync
refers to whether the file is directly synchronized to the disk when it is written to the operating system buffer. Through configuration, you can choose three synchronization methods: immediate synchronization, synchronization every second, and no active synchronization but controlled by the operating system. About file I/O buffering: https://www.litreily.top/2018/10/25/io-cache/
BGREWRITEAOF
to reduce duplicate commands, expired commands, merged commands, etc. fork
sub-process. The child process has a copy of the data of the server process, ensuring data security without using locks. In addition, AOF is used to rewrite the buffer to solve data inconsistency. The file size is small and suitable for copying for cold backup
Compared with AOF, the backup and recovery speed is faster
lost a lot of data
fork the child process to do BGSAVE
, which consumes a certain amount of memory resources
Less data loss
Added write buffer, No need for addressing, fast
append-only, no need for disk addressing, high efficiency
The file size is large
AOF needs to write aof_buf
every time and open AOF After persistence, QPS will be slightly reduced
After the above review, we can see that there are obvious differences between RDB and AOF persistence.
Stored content: RDB stores data at a certain point in time; AOF stores executed write commands.
File size: RDB files are smaller; AOF files are larger.
Writing method: RDB can use the foreground/background writing method; AOF uses the method of storing the command in the buffer every time a write command is executed, and can be rewritten regularly.
Data loss: RDB loses all data between the crash and the last RDB synchronization; AOF does not lose or loses 1s or more according to the refresh method configured in the I/O buffer. A few seconds of data.
Based on these comparisons, we can see thatRDB persistence is more suitable for saving data at a point in time, and copying it to other places during master-slave replication or full data off-site disaster recovery , and AOF persistence has less data loss, so it is more suitable as a local backup and as a fault recovery when Reids hangs up and restarts. This is my understanding of why Redis requires two persistence methods. For more programming-related knowledge, please visit:
Introduction to ProgrammingThe above is the detailed content of There are two persistence methods in Redis. Why are two persistence methods needed?. For more information, please follow other related articles on the PHP Chinese website!