redis数据持久化之RDB

1. 什么是RDB

Redis是一个基于内存的NoSQL数据库系统,它支持多种数据类型(如字符串、列表、哈希、集合、有序集合)和多种操作(如插入、查询、删除等)。在Redis中,我们可以使用快照RDB两种方法来实现数据持久化。

那么什么是RDB呢?RDB指Redis DataBase,是Redis的一种持久化方式,它可以将当前内存中的数据快照写入磁盘,以便在Redis进程重启后能够将数据恢复。

2. RDB的优点

2.1. RDB实现过程简单、高效

相对于AOF方式,RDB实现的过程更加简单高效。AOF方式需要将所有修改操作记录下来,如果操作频繁,那么日志文件可能会很大,导致写入效率非常低下。而RDB直接将当前数据快照写入磁盘,无需对每次修改进行记录。

SAVE      # 执行此命令后,所有数据会被写入RDB文件,进程会阻塞直到写入完成。

BGSAVE # 执行此命令后,Redis会在后台创建一个新进程,用于将数据写入RDB文件,进程不会阻塞。

可以看出,RDB的实现效率非常高,也很简单,适合用于对数据要求不高的场景。

2.2. RDB文件紧凑、保存数据结构信息

Redis会将一个快照的所有数据结构(如字符串、列表、哈希、集合、有序集合)以及它们的键值对信息保存在一个二进制文件中,这个文件就是RDB文件。RDB文件中的数据开销非常小,可以使用压缩工具对RDB文件进行压缩,从而减少磁盘空间的占用。同时,RDB文件还会保存数据结构的相关信息,这些信息能够使Redis在数据恢复时更加高效。

3. RDB的缺点

3.1. 可能数据会丢失

由于RDB方式是将快照中所有的数据写入磁盘,如果在快照文件生成之后,Redis发生了故障导致没有来得及将所有的数据写入快照文件,那么这部分数据就会丢失。

3.2. 数据恢复时间比较长

在Redis崩溃或重启时,需要将数据从磁盘加载回内存,而加载的时间是比较长的,这样就会导致Redis服务在重启时需要相应长的恢复时间。

4. RDB的配置和使用

4.1. 配置RDB持久化参数

通过修改Redis的配置文件redis.conf,可以设置RDB持久化的参数,如快照保存的路径、快照触发的条件、是否压缩等,例如:

save 900 1       # 在900秒内如果发生了1次修改,就会触发快照保存。

save 300 10

save 60 10000

dbfilename dump.rdb # 快照保存的文件名

dir /var/lib/redis # 快照保存的路径

rdbcompression yes # 是否压缩快照文件(默认为yes)

4.2. 手动执行RDB快照

手动执行RDB快照可以使用SAVE或BGSAVE命令,其中SAVE命令会将Redis进程阻塞,等待数据写入完成后才会解除阻塞,而BGSAVE命令则会以子进程的方式来执行快照,不会阻塞Redis进程。

SAVE命令:

127.0.0.1:6379> SAVE

BGSAVE命令:

127.0.0.1:6379> BGSAVE

4.3. RDB恢复

在Redis崩溃或重启时,可以通过将RDB文件复制到Redis的数据目录下,并在Redis配置文件redis.conf中指定该文件的位置,来恢复Redis的数据。例如:

dbfilename dump.rdb

dir /var/lib/redis

5. 总结

RDB是Redis的一种持久化方式,它可以将当前内存中的数据快照写入磁盘,以便在Redis进程重启后能够将数据恢复。相较于AOF方式,RDB实现过程简单、高效,并且所需的数据空间比AOF方式小。

在使用RDB时需要注意的是,RDB有可能会丢失数据,因为在快照文件生成之后,Redis发生了故障导致没有来得及将所有的数据写入快照文件,那么这部分数据就会丢失。此外,在Redis崩溃或重启时,需要将数据从磁盘加载回内存,恢复时间比较长。

数据库标签