Redis持久化有两种方式 :

  • 数据快照(RDB)
  • 过程日志(AOF)

1. 数据快照(RDB)

定义 : 将当前数据状态进行保存,快照形式,存储的是数据结果,存储格式简单,关注点在数据。

RDB启动方式有三种 :

  • save指令
  • bgsave指令
  • save配置

1.1 RDB启动方式–save指令

下面进行实操演示 :

开启Redis服务器后,使用客户端连接,

使用了save命令之后,会在data目录下生成dump.rdb文件 :

  • 命令
1
save
  • 作用

    ​ 手动执行一次保存操作

1.1.1 save指令相关配置

  • dbfilename dump.rdb

    ​ 说明 : 设置本地数据库文件名,默认为dump.rdb , 通常设置为dump-端口号.rdb

  • dir

    ​ 说明: 设置存储.rdb文件的路径,例如redis根目录下的data

  • rdbcompression yes

    ​ 说明 : 设置存储至本地数据库时是否压缩数据,默认为yes

  • rdbchecksum yes

    ​ 说明 : 设置是否进行RDB文件格式校验,该校验过程在写文件或读文件过程中均执行。

修改conf目录下的redis-6379.conf,添加参数 :

注意: 修改完配置文件后需要重启Redis服务才能生效。

然后,再次启动客户端执行save指令就会发现重新生成了dump-6379.rdb文件

所以,在执行save指令之后,就可以实现保存数据,重启一下Redis服务之后,之前的数据依旧会存在。

从以上图示可以看出,数据还是存在的。

注意:save指令的执行有可能会阻塞当前Redis服务器,直到当前RDB过程完成为止,就有可能会造成长时间阻塞,线上环境不建议使用

1.2 RDB启动方式–bgsave指令

  • 命令
1
bgsave
  • 作用

    ​ 手动启动后台保存操作,但不是立即执行

1.2.1 bgsave指令相关配置

在前面的配置基础上,加一条参数即可,

  • stop-writes-on-bgsave-error yes

    ​ 说明 : 后台存储过程中如果出现错误时,是否停止保存操作

1.3 RDB启动方式–save配置

  • 配置
1
save second changes
  • 作用

    ​ 满足限定时间范围内key的变化数量达到指定数量即进行自动持久化

  • 参数

    ​ second : 限定时间范围

    ​ changes : 监控key的变化量

  • 位置

    ​ 在conf文件中进行配置

  • 例子

    ​ save 900 1

    ​ save 300 10

**

1.4 RDB三种启动方式的比较

方式 save指令 bgsave指令
读写 同步 异步
阻塞客户端指令
额外内存消耗
启动新进程

注意 : save配置在后台执行的还是bgsave操作,所以比较上就不列出来了。

1.5 RDB的优点与缺点

RDB优点

  • RDB是一个紧凑压缩的二进制文件,存储效率较高。
  • RDB恢复数据的速度比AOF快很多。

RDB缺点

  • 无法做到实时持久化,丢失数据可能性较大。
  • bgsave指令的执行要进行fork操作创建子进程,性能会被消耗。

2. 过程日志(AOF)

概念: 将数据的操作过程进行保存,日志形式,存储的是操作过程,存储格式复杂,关注点在数据的操作过程。

  • AOF的主要作用是解决了数据持久化的实时性。

2.1 AOF写数据三种策略(appendfsync)

  • always(每次)

    ​ 每次写入操作均同步到AOF文件中,数据零误差,但性能较低,不建议使用。

  • everysec (每秒)

    ​ 每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高,建议使用,也是默认配置。

  • no (系统控制)

    ​ 由系统进行控制,整体过程不可控

2.2 AOF功能开启

  • 配置
1
appendonly yes|no
  • 作用

    ​ 是否开启AOF持久化功能

  • 配置

1
appendfsync always|everysec|no
  • 作用

    ​ AOF写数据策略(从缓存中将数据写入aof文件)

2.3 AOF相关配置

  • 配置
1
appendfilename filename
  • 作用

    ​ AOF持久化文件名,默认文件名是appendonly.aof,建议配置为appendonly-端口号.aof

  • 配置

1
dir
  • 作用

    ​ AOF持久化文件保存的路径,与RDB持久化文件保存一致即可。

2.4 AOF重写

当命令不断的写入AOF文件中,文件就会越来越来大,AOF文件重写就能解决这个问题。

AOF文件重写 : 将对同一个数据的若干条指令执行结果转化成最终结果数据对应的指令进行记录。

2.4.1 AOF重写方式

  • 手动重写
1
bgrewriteaof
  • 自动重写
1
2
auto-aof-rewrite-min-size size
auto-aof-rewrite-percentage percentage

AOF自动重写方式

  • 自动重写触发条件设置
1
2
auto-aof-rewrite-min-size size
auto-aof-rewrite-percentage percent
  • 自动重写触发的对比参数( 运行指令info Persistence获取具体信息)
1
2
aof_current_size
aof_base_size
  • 自动重写触发条件
1
2
aof_current_size > auto_aof-rewrite-min-size
(aof_current_size - aof_base_size)/aof_base_size >= auto-aof-rewrite-percentage

3. RDB与AOF的区别

持久化方式 RDB AOF
占用存储空间 小(数据级 : 压缩) 大(指令集 : 重写)
存储速度
恢复速度
数据安全性 会丢失数据 依据策略决定
资源消耗 高/重量级 低/轻量级
启动优先级