本文主要介绍Redis持久化策略
一、持久化方式分类
二、持久化方式具体介绍
三、持久化方式比较
一、Redis 持久化方式分类
1.RDB 全量持久化 也称快照记录
2.AOF 增量持久化
3.RDB-AOF 混合持久化
4.关闭持久化,不需要持久化。
1. RDB:Redis DataBase ,
RDB是redis 默认的持久化方案. RDB 是当满足一定条件时, 就会将redis内存中的数据写入磁盘,并生成一个快照文件dump.rdb 文件.Redis 重启会通过加载dump.rdb文件恢复数据.
dump.rdb 是压缩的二进制文件,其中包含了服务器在各个数据库中存储的键值对数据等信息。
2.Redis 创建RDB文件的方法:
2.1、手动触发 save 命令手动触发 ,save命令是一个无参数命令,在创建RDB文件成功后返回ok。
SAVE命令会阻塞整个服务器,用户在使用整个命令时无法为客户提供服务
2.2、bgsave 命令, 异步创建一个子进程写dump.rdb文件,不会阻塞redis服务。父进程占用的内存越大,创建子进程这一 操作耗费的时间也就越长。
2.2 、设置save配置选项让服务器在满足指定条件时自动执行bgsave命令。
save <seconds> <changes> 简单说,就是服务器在seconds 秒内,对其包含的各个数据库总共执行了多少次changes操作,那么服务将自动执行一次BGSAVE 命令
seconds 触发持久化操作需要的时常
changes 触发持久化操作需要的次数
例如: save 60 10000 服务器在60秒内至少执行10000次修改,会触发bgsave命令。
可以同时执行多个save选项
save 60 100
save 600 20000
save 6000 3333333
当任意一个条件满足时,会执行一次BGSAVE操作。成功创建RDB文件后,负责自动触发bgsave命令的时间计数器以及修改次数计数器会清零并重新开始技术。
默认设置
如果用户在启动redis 服务器时,既没有显示的关闭RDB持久化功能,也没有启动AOF 持久化功能,那么Redis默认会使用以下save 选项进行RDB持久化:
save 60 100000
save 300 100
save 3600 1
RDB 文件结构

具体含义,我就不在这里赘述了,感兴趣的朋友可以自己找资料学习下.
数据丢失
RDB 这种是按照时间点记录的快照的方法持久化redis服务器数据.时间点快照有一个特点:系统停机时将丢失最后一次成功持久化后的所有数据.
无论使用save 手动 还是 bgsave 自动,停机时服务器丢失的数据取决于创建RDB文件的时间间隔:间隔越长,停机时丢失的数据也就越多.
RDB 是全量数据备份的方法,多次全量备份会影响服务器的性能,所以AOF 增量持久化方法出现.
AOF 持久化
与RDB全方式相比, AOF是增量的方式备份数据库信息.核心原理在于:服务器每次执行完命令后,会以协议文本的方式将被执行的命令追加到AOF文件末尾.这样一来,在服务器停机后,只要重写执行AOF文件中保存的命令,就可以将数据库恢复至停机之前的的状态.
如何打开 AOF持久化功能
applendonly <value> 将这个值设置为yes即可
设置AOF文件 冲洗评率
appendfsync <value> 选项有三个值可选: always everysec 和 no
always : 没写一个命令, 就对AOF 进行一次冲洗操作,可想而知 这种方式对服务器性能的损耗有多严重,但是数据最完整
everysec 每隔1秒 ,对AOF 文件执行一次冲洗,服务器停机时会丢失1秒的数据. AOF冲洗评率默认是这个选项
no : 不主动对AOF 进行冲洗,由 操作系统决定何时对AOF进行冲洗.
现代操作系统通常会把针对硬盘的多次AOF写操作优化为一次写操作。具体做法是,当程序调用write系统对文件进行写入时,系统并不会直接把数据写入硬盘,而是先将数据写入内存缓冲区,等到指定的时限达到或满足某些写入条件时,系统才会将flush 系统调用,将缓冲区中的数据冲洗至硬盘。
AOF重写
如果服务器对相同的键执行过多次修改,AOF 文件中,对于同一个键会存在多条命令,而我们只需要保存最后一条命令即可,所以redis 提供了AOF重写操作,生成一个全新的AOF文件.
BGREWRITTEAOF命令
该命令是无参数命令. 执行此次命令,redis 会创建出一个子进程,由它扫描整个数据库并生产新的AOF文件.当文件生成成功后,子进程会通知服务器,服务将AOF文件替换成子进程生成的新文件.
AOF 重写配置选项:
auto-aof-rewrite-min-size <value> 设置触发自动AOF文件重写所需的最小AOF体积, 如:设置成64MB,如果文件小于64MB 则不会触发AOF
zuto-aof-rewirte-percentage <value> 触发AOF 所需的文件体积增大比例, 设置成100 ,文件增大一倍会触发AOF
AOF的优缺点:
1、AOF存储的时协议文本,所以它的体积会比包含相同数据,二进制格式的RDB文件要大的多,并且生产AOF文件所须的时间会别RDB文件所需的时间更长。
2.RDB 要比AOF 数据恢复速度快的多,并且数据体积越大,两者差异越明显
3.AOF重写会新建一个进程,数据库体积庞大的时,AOF重写会占用大量资源,并导致服务器被暂时的阻塞。
RDB-AOF 混合持久化 Redis 4.0 版本引入
开启 混合持久化功能:
aof-use-rdb-preamble <value> 设置为yes ,那么 Redis 在执行AOF 操作时, 就会像执行 BGSAVE 命令那样,根据数据库当前的状态生成相应的RDB数据,并将这些数据写入新建的AOF文件中,至于那些AOF重写开始之后执行的Redis 命令,会继续以协议文本的方式追加到新的AOF文件的末尾。

持久化文件载入方式:

无持久化
我们也可以不需要持久化 :save "" 设置即可
SHUTDOWN : 关闭服务器
当Redis 服务接收到 shutdown 命令后,默认会执行以下动作:
根据服务器持久化配置选项,决定是否执行数据保存操作。