redis三种持久化方式

reids主要是两种持久化的方式:RDB和AOF

  1. RDB(Redis DataBase):RDB保存某一时间点之前的快照数据。
  2. AOF(Append-Only File):所有的命令行记录以redis请求协议的格式完全持久化存储为aof文件。
  3. 混合持久化(4.x):指进行AOF重写时,子进程将当前时间点的数据快照保存为RDB文件格式,将父进程累积命令保存为AOF格式。

一、RDB快照

有两种触发方式

1、通过配置参数:

通过一定周期内命令执行的个数,超过阈值即执行快照生成。

save 900 1
save 300 10
save 60 10000
或
save '' #表示关闭RDB快照。注意:主从复制的主节点永远关不掉RDB,配置了也没用。

表示超过多少秒,有多少命令执行,满足则执行快照生成。例如:60秒内超过10000个命令被执行则底层调用bgsave命令生成快照。 

2、手动执行bgsave命令或save命令或SHUTDOWN,显式生成快照

save:使用主进程保存,若数据量大可能会造成主进程阻塞。会影响redis服务。

bgsave:fork一个子进程去保存。不会影响redis服务。如图:

RDB持久化优缺点

优点:

  1. 性能好。使用子进程进行持久化,不影响主进程服务。
  2. 启动效率高。启动时直接解析RDB二进制文件,比AOF效率高。

缺点:

  1. 数据安全性低。RDB是隔一段时间进行持久化,如果期间发生故障,数据会丢失。
  2. RDB持久化期间大量写入操作,产生大量分页错误,内核不断copyonwrite复制异常页,导致性能降低。

二、AOF持久化

#redis.conf配置通过下面配置开启aof,默认是关闭的
appendonly yes

命令执行后,会写入aof缓冲区(在内存中),之后通过某种策略,再写入aof文件

#redis.conf配置同步策略
appendfsync everysec

aof同步策略有三种:

  • no 表示等操作系统进行数据缓存同步到磁盘(通常同步周期最长30S)
  • always 表示每次更新操作后调用fsync()将数据写到磁盘。非常影响性能,生产环境不能开。
  • everysec 每秒同步一次,默认值

AOF重写机制

随着命令不断写入AOF,文件越来越大

有两种触发方式

  1. 手动触发:bgrewriteaof命令
  2. 自动触发:auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定触发时机
#redis.conf配置
auto-aof-rewrite-percentage 100 表示当前AOF文件空间和上次重写后的AOF文件空间的比值
auto-aof-rewrite-min-size 64mb #表示AOF文件重写时文件最小体积64MB

AOF优缺点

优点:

  1. 数据安全。当使用always策略时,可以做到数据0丢失。

缺点:

  1. 启动效率低。aof文件较大时,启动效率比RDB效率低

三、混合持久化

通过aof-use-rdb-preamble yes配置开启

加载时,首先会识别AOF文件是否以REDIS字符串开头。如果是则按照RDB格式加载,加载完RDB后继续按照AOF格式加载剩余部分。

混合持久化方案兼顾了RDB的速度和AOF的安全性

猜你喜欢

转载自blog.csdn.net/sumengnan/article/details/113095458