redis数据持久化方式有两种:
1. RDB 方式 (Redis Database)
将某一时刻内存中的数据保存到硬盘中,保存的文件扩展名一般为 rdb。
2. AOF 方式 (append-only file)
追加文件,将执行的写命令(增删改)写到硬盘中。(类似所有更改数据执行日志,但记录的是命令)
两种方法可以单独使用或同时使用,在重写加载数据时 AOF优先级更高,只会使用 AOF 方式恢复数据。
一. RDB 方式持久化
1. 创建快照的方法
(1) 使用 BGSAVE 命令
Redis 会调用 fork 来创建一个子进程将数据写入硬盘,父进程可以继续处理命令请求。
(2) 使用 SAVE 命令
服务器接到 SAVE 命令,在没有创建快照完成前,不能再处理其他任何命令。
(3) 配置 redis.conf 中 save 项
例子 :save 60 5 #距离上次生成快照超过60秒,并且在此期间至少有五次写操作,则reids自动执行BGSAVE命令创建快照。
如果配置多个 save 项,则在满足任何一项时,redis都会执行BGSAVE命令。
(4) 通过 SHUTDOWN 命令关闭服务器(kill不行)或接到TERM信号
这种情况下,会自动执行SAVE命令,并不在给任何客户端提供服务。生成快照后关闭服务。
(5) 集群中数据复制时(SYNC命令)
如果主服务器没有再执行 BGSAVE 命令,或不是在刚刚执行完 BGSAVE 命令,则主服务器就会执行 BGSAVE。
可以使用 lastsave 命令查看最后保存快照时间。
2. 相关配置项(redis.conf):
save 900 1 # 距离上次生成快照超过900秒,并且在此期间至少有一次写操作,则 reids 自动执行 BGSAVE save 300 10 # 距离上次生成快照超过300秒,并且在此期间有10次写操作,则 reids 自动执行 BGSAVE save 60 10000 # 距离上次生成快照超过60秒,并且在此期间有10000次写操作,则 reids 自动执行 BGSAVE save "" # 表示禁用 RDB 快照持久化功能,但是仍然可以使用SAVE 或 BGSAVE 生成 RDB 文件 stop-writes-on-bgsave-error yes # 当BGSAVE命令执行发生错误时,停止所有写操作(增删改-都不能正确执行) rdbcompression yes # 压缩 dbfilename dump.rdb # 快照保存文件名称, 服务器启动时自动加载快照中数据 dir /redis-data # 快照保存文件路径,绝对路径
二、AOF持久化
1. 相关配置项(redis.conf)
append-only no #AOF启用开关 (no|yes),禁用情况下任然可以执行BGREWRITEAOF 生成 AOF 文件 appendfsync everysec #同步策略 (always|everysec|no) * always #在执行每个写命令的时候,同步保存到硬盘。(严重影响性能) * everysec #每秒钟同步到硬盘一次 * no #将命令写到 AOF 缓冲区后,由操作系统决定同步时间 appendfilename "appendonly.aof" #持久化文件名 dir /redis-data #文件保存路径,绝对路径 (同快照) no-appendfsync-on-rewrite no # AOF 重写期间是否同步 参考:https://blog.csdn.net/jingkyks/article/details/46956905 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 当AOF文件大于64mb,并且文件体积比上一次重写之后大了100%(一倍)时,自动执行BGREWRITEAOF命令
AOF体积增大问题?
可以使用 BGREWRITEAOF 命令,提出文件中冗余的命令记录。(工作原理和BGSAVE相似:创建子进程)
Redis 7 版本 AOF 变动
1、新增了 AOF 保存目录配置项
appenddirname "appenddirname"
实际的 AOF 保存目录是 dir/appenddirname/ 。
2、在 7 版本前只有一个 appendonly.aof 文件,7 版本中拆分为三个文件(Multi Part AOF)
appendonly.aof.1.base.rdb # 基础的 AOF 文件,一般由子进程重写产生,并且最多只会有一个 appendonly.aof.1.incr.aof # 增量 AOF 文件,一般会在 AOF 重写时被创建,此类型文件会存在多个 appendonly.aof.manifest # AOF 文件清单,用来跟踪和管理 AOF 相关文件
三、开启 RDB 和 AOF 方式混合使用
编辑 redis.conf 文件
aof-use-rdb-preamble yes # 开启,no 表示禁用
学习参考资料:《Redis 实战》 【美】josiah L.Carson 著 - 黄健宏 译