关于redis:Redis持久化-RDB

3次阅读

共计 1602 个字符,预计需要花费 5 分钟才能阅读完成。

长久化

长久化(Persistence),即把内存中的数据保留到磁盘中。

长久化的实现形式

快照式

在某个时刻把所有数据进行残缺备份。

例:MySQL 的 Dump 形式、Redis 的 RDB 形式。

日志式

把用户执行的所有写指令(增删改)备份到文件中,还原数据时只须要把备份的所有指令从新执行一遍即可。

例:MySQL 的 Binlog、Redis 的 AOF、Hbase 的 HLog。

RDB 简介

默认状况下,Redis 将数据库快照保留在名为 dump.rdb 的二进制文件中。

当 Redis 须要保留 dump.rdb 文件时,服务器执行以下操作:

  1. Redis 调用 forks 派生一个子过程。父过程和子过程同时存在。
  2. 子过程将以后内存中的数据库快照写入到一个长期 RDB 文件中。
  3. 当子过程实现对新 RDB 文件的写入后,Redis 用新 RDB 文件替换原来的 RDB 文件。

当 Redis 须要复原数据时,Redis 程序能够通过载入 RDB 文件来还原数据库的状态。

RDB 的触发机制

save 命令

save 命令是一个同步操作命令,会占用 Redis 的主过程。若 Redis 数据十分多时,save 命令执行速度会十分慢,导致阻塞所有客户端的申请。

生产环境不倡议应用 save 命令,能够应用 bgsave 命令代替。

127.0.0.1:6379> save
OK

bgsave 命令

bgsave 命令是一个异步操作命令,Redis 应用 Linux 零碎的 fock() 生成一个子过程来将数据保留到磁盘,主过程能够持续为客户端提供服务。

如果操作胜利,能够通过客户端命令 LASTSAVE 来查看操作后果。

127.0.0.1:6379> bgsave

主动生成 RDB

通过配置 Redis 的配置文件,能够设置“在 N 秒内数据集至多有 M 个改变”这一条件被满足时,主动进行数据集保留操作。

例如,以下设置会让 Redis 在满足“60 秒内至多有 1000 个键被改变”这一条件时,主动进行数据集保留操作:

save 60 1000

savebgsave 比照

命令 save bgsave
IO 类型 同步 异步
阻塞 是(阻塞产生在 fock,十分快)
复杂度 O(n) O(n)
长处 不耗费额定的内存 不阻塞客户端命令
毛病 阻塞客户端命令 fock 子过程须要耗费大量内存

RDB 罕用长久化配置

# RDB 主动长久化规定
# 当 900 秒内有至多有 1 个键被改变时,主动进行数据集保留操作
save 900 1
# 当 300 秒内有至多有 10 个键被改变时,主动进行数据集保留操作
save 300 10
# 当 60 秒内有至多有 10000 个键被改变时,主动进行数据集保留操作
save 60 10000

# RDB 长久化文件名
dbfilename dump-<port>.rdb

# 数据长久化文件存储目录
dir /var/lib/redis

# bgsave 产生谬误时是否进行写入,通常为 yes
stop-writes-on-bgsave-error yes

# rdb 文件是否应用压缩格局
rdbcompression yes

# 是否对 rdb 文件进行校验和测验,通常为 yes
rdbchecksum yes

RDB 的长处

  1. RDB 是一个十分紧凑的文件,它保留了某个工夫点的数据集快照,实用于数据集的定时备份。
  2. RDB 是一个繁多文件,能够很不便传送到另一个数据节点,实用于劫难复原。
  3. RDB 在保留 RDB 文件时父过程只须要 fork 一个子过程,接下来的工作全副由子过程实现,父过程不须要再做其余 IO 操作,所以 RDB 长久化形式能够最大化 redis 的性能。
  4. 通常状况下,在复原大数据集的时候,RDB 形式会比 AOF 更快一些。

RDB 的毛病

  1. 耗时、耗性能。如果设置的备份频率较高,RDB 须要常常 fork 子过程来进行备份操作,当数据集比拟大并且服务器性能较差时,fork 可能会比拟耗时,从而导致 Redis 在肯定工夫内(毫秒级 - 秒级)不能响应客户端的申请。
  2. 不可控、失落数据。通常 RDB 以配置形式进行定时备份,如果 redis 意外宕机(例如电源中断),可能会失落上一次备份到宕机前这段时间的数据。
正文完
 0