Home  >  Article  >  Database  >  There are two persistence methods in Redis. Why are two persistence methods needed?

There are two persistence methods in Redis. Why are two persistence methods needed?

青灯夜游
青灯夜游forward
2021-10-25 10:35:211322browse

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!

There are two persistence methods in Redis. Why are two persistence methods needed?

Two persistence methods of Redis

As we all know, Redis provides two persistence methods: AOF and RDB. Let’s start with Let’s briefly review.

RDB persistence

  • RDB persistence, is to save the state of the database at the current point in time to the disk, also known as Snapshot persistence.
  • RDB can be triggered manually or executed periodically according to the server configuration.
  • The file generated by RDB is a compressed binary file, through which the database can be restored to the state at that point in time.
  • Redis provides the foreground RDB persistence command 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.
  • In the RDB binary file, key-value pair data is saved, using compressed custom encoding with verification. It can be converted into readable through the od command.
  • During master-slave replication, the initialized full replication uses RDB files.

[Related recommendations: Redis video tutorial]

AOF persistence

  • AOF persistence , the full name is Appen Only File, which means the appended persistence method, in which write commands are saved instead of data.
  • The AOF persistence process is divided into three steps: command appending, file writing, and file synchronization.
  • Command appending: Every time the Redis server executes a write command, it will append the write command to the end of the aof_buf buffer in the server status in the AOF protocol format.
  • File writing: In Redis, before each event loop ends, the flushAppendOnlyFile function is called to write the contents of the aof_buf buffer to the AOF file.
  • File synchronization: Synchronizationsync 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/
  • Redis gives priority to using AOF files to recover data.
  • Because AOF files store commands and are not compressed, their size is larger than RDB files.
  • AOF files can be rewritten regularly using BGREWRITEAOF to reduce duplicate commands, expired commands, merged commands, etc.
  • AOF files support background rewriting, which is implemented in the form of 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 advantages and disadvantages of the two kinds of persistence

The advantages of RDB

  • The file size is small and suitable for copying for cold backup

  • Compared with AOF, the backup and recovery speed is faster

Disadvantages of RDB

  • lost a lot of data

  • fork the child process to do BGSAVE, which consumes a certain amount of memory resources

Advantages of AOF

  • Less data loss

  • Added write buffer, No need for addressing, fast

  • append-only, no need for disk addressing, high efficiency

Disadvantages of AOF

  • The file size is large

  • AOF needs to write aof_buf every time and open AOF After persistence, QPS will be slightly reduced

Why does Redis need two kinds of persistence?

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 Programming

! !

The 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!

Statement:
This article is reproduced at:juejin.cn. If there is any infringement, please contact admin@php.cn delete