Redis持久化:How Redis writes data to disk(怎么把数据从内存中写入硬盘)
一、RDB(Redis DataBase)
RDB:以指定的时间间隔执行数据集的时间点快照(snapshot),将数据和状态以文件的形式写入磁盘,快照文件称为RDB文件(dump.rdb),保存备份是它执行的是全量快照(保存内存中的全部数据)。
(1)自动触发 案例:5秒中至少有两次修改就进行持久化操作(关闭 Redis 或者使用 flushdb 命令后,不满足前面的条件也会触发RDB)
修改 dump 文件名称
修改 dump 文件保存路径
执行 flushall / flushdb 命令也会产生 dump.rdb 文件,但里面是空的。
启动 Redis 后读取 /opt/myredis/dumpfiles 路径下的备份文件
Redis 备份文件和 Redis 不要放在一台主机上
(2)手动触发
SAVE
:执行备份,在主程序中执行会阻塞当前 Redis 服务器,直到持久化工作的完成,执行 SAVE
命令期间,Redis 不能处理其他命令
BGSAVE
:执行备份,在后台异步进行快照操作,不阻塞方式,fork一个子进程在后台进行持久化操作,同时主进程可以修改数据
LASTSAVE
:查看最后一次成功执行快照的时间,返回时间戳
(3)RDB 文件的修复
/usr/local/bin
路径下执行 redis-check-rdb xxx.rdb
(4)触发 RDB 快照的情况
- 配置文件中进行了快照配置
- 手动执行
SAVE
和BGSAVE
命令 - 执行
FLUSHDB
和FLUSHALL
命令,产生的 rdb 文件是空的 - 执行
SHUTDOWN
命令且没有开启 AOF 持久化 - 主从复制时,主节点自动触发
(5)禁用 RDB 快照
- 动态禁止
redis-cli config set save ""
- 永久生效,在配置文件中将原本的
save <seconds> <changes>
改为save ""
(6)RDB 优化参数
stop-writes-on-bgsave-error yes
在执行BGSAVE
是发生错误是否停止写入,默认为 yesrdbcompression yes
在保存快照文件时是否进行压缩,Redis 会采用 LZF 算法进行压缩rdbchecksum yes
在保存快照文件时是否进行数据校验(采用 CRC64),但是会增加大约10%的性能消耗rdb-del-sync-files no
在没有持久性的情况下删除复制中使用的RDB文件
(7)总结
优点:适合大规模的数据恢复;定时任务备份;RDB文件加载速度比 AOF 快
缺点:快照之间的数据可能会丢失;RDB 进行数据的全量快照,在数据量太大的情况下会严重影响服务器性能
二、AOF(Append Only File)
以日志的形式来记录每个写操作,只记录写命令,只允许追加文件不能修改文件,Redis 启动后会执行日志文件中的内容,从而完成数据的恢复。
(1)开启 AOF
appendonly yes
备份文件为 appendonly.aof
(2)AOF 持久化流程
Redis Server 接收写命令后不会马上将其写入 AOF 文件,会先在 AOF 缓存中进行保存,AOF 缓冲区会根据同步文件的三种策略将命令写入磁盘。随着 AOF 内容的增加,会根据规则进行命令的合并(AOF 重写),达到压缩 AOF 文件的目的。启动 Redis Server 后会根据 AOF 文件将数据载入到内存中。
(3)同步文件的三种策略
Always
同步写回,每个写命令执行完后立刻同步地将日志写入磁盘no
每个写命令执行完,先把日志写到 AOF 缓冲区中,由操作系统决定何时将缓冲区内容写入磁盘everysec(默认策略)
每秒写回,每个写命令执行完,先把日志写到 AOF 缓冲区中,每隔 1 秒再将缓冲区内容写入磁盘
(4)AOF 文件的保存路径
(5)AOF 文件名称及其组成(Redis 7 之后的 aof 文件有 3 种类型)Multi Part AOF
BASE
:基础 AOF ,一般由子进程通过重写产生,该文件最多只有一个
INCR
:增量 AOF,一般会在 AOFRW(重写) 开始后被创建,可以有多个
HISTORY
:历史 AOF,由 BASE 和 INCR AOF 变化而来,本次 AOFRW 之前对应的 BASE 和 INCR 都将变成 HISTORY,该类型的 AOF 文件会被 Redis 自动删除
上述文件由 manifest(清单) 来进行管理和跟踪,AOF 文件和 manifest 被放入一个单独的目录中,目录名由 appenddirname 配置
读取到的写指令会被加到 INCR 文件中
(6)INCR AOF 文件修复命令
在/usr/local/bin
目录下的redis-check-aof
命令
redis-check-aof --fix appendonly.aof.1.incr.aof
会删除出错的命令和出错命令之后的所有命令
(7)总结
优点:更好的保存数据,性能高,数据可以紧急恢复
缺点:AOF 文件通常比相同数据集的 RDB 文件大,恢复速度慢于 RDB 文件
三、AOF重写机制(AOF 文件压缩)
随着Redis服务的进行,AOF文件会越来越大,恢复的时间也会越来越长,为了解决上述问题,Redis 增加了重写机制。AOF 文件大小达到设置的峰值,Redis 就会自动对文件进行压缩,只保留可以恢复数据的最小指令集。也可以使用命令bgrewriteaof
来重写。
标签:文件,持久,AOF,Redis,命令,RDB,快照,persistence From: https://www.cnblogs.com/shiguangrusuo/p/18064825