redis持久化RDB

介绍

RDB,redis database

在 指定的时间间隔内 将内存中的数据集 快照(snapshot) 写入磁盘。也是 默认 的持久化方式

快照:可以理解成把当前时刻的数据拍成一张照片保存下来。

这种方式是就是将内存中数据以快照的方式写入到 二进制 文件中

保存路径

在redis.conf配置文件中:

dir ./

表示当前启动redis服务的目录,

  • 如果在linux上安装redis,需要改成固定目录
  • 如果docker redis,不需要修改

文件名

在redis.conf配置文件中,默认的文件名为 dump.rdb

dbfilename dump.rdb

保存策略

正常关闭

  • linux安装redis,在客户端执行shutdown时会自动保存

  • docker redis,在docker stop时会自动保存

save命令

以同步方式将当前 Redis 所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。

会阻塞客户端命令,不会消耗额外内存,很少使用

bgsave命令

在后台异步保存当前数据库的数据到磁盘

BGSAVE 命令执行之后立即返回 OK ,然后 Redis 会 fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

不会阻塞客户端命令,会消耗额外内存,一般较少使用

自动保存(关键)

通过配置文件实现,见下面

自动保存配置文件(关键)

保存策略

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed


save 900 1 # 在900秒内执行1次修改,就执行持久化
save 300 10
save 60 10000

在n秒内执行m次修改,就执行持久化

stop-writes-on-bgsave-error

无法写入磁盘,直接关闭写操作

stop-writes-on-bgsave-error yes

rdbcompression

进行rdb保存时,将文件压缩

rdbcompression yes

rdbchecksum

保存快照后,使用CRC64算法进行校验,会增加10%的性能消耗,如果希望获取最大性能提升,可以关闭此功能

如果仅做缓存使用,关闭该功能,以及关闭持久化

rdbchecksum yes

获取数据保存路径

config get dir

数据恢复

  1. 关闭redis
  2. 把*.rdb文件拷贝到数据保存路径,通过config get dir查看
  3. 启动redis,快照文件直接加载

优点

  • 不影响接收客户端指令

与AOF相比:

  • 二进制数据文件,节省磁盘空间,适合备份和数据恢复
  • 恢复数据快

缺点

  • 数据庞大,消耗性能
  • 可能会丢失数据。每间隔一段时间保存一次,如果redis非正常退出,会丢失最后一次修改的数据

原文出处:/show_1EF5ofwSWXsI.html