Redis持久化
Posted 佳716
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis持久化相关的知识,希望对你有一定的参考价值。
Redis持久化
redis支持RDB、AOF两种持久化机制,持久化功能有效地避免因线程退出造成的数据丢失问题,当下次重启时利用之前的持久化文件即可实现数据恢复。
RDB
RDB持久化是把当前线程数据生成快照保存到硬盘的过程。
触发机制
-
手动触发
-
save命令:阻塞当前redis服务器,直到RDB过程完成为止
-
bgsave命令:Redis进程执行fork操作创建子进程,RDB由子进程负责,阻塞只发生在fork阶段
-
-
自动触发
- 使用save相关配置:
- 从节点执行全量复制操作,主节点自动执行bgsave
- 执行debug reload命令触发save
- 执行shutdown命令时,没有开启AOF则自动执行bgsave
优缺点
- 优点
- RDB是一个紧凑压缩的二进制文件,非常适合备份,全量复制等场景
- Redis加载RDB恢复数据远远快于AOF的方式
- 缺点
- 没办法做到实时持久化/妙计持久化。bgsave执行fork创建子进程,属于重量级操作,频繁执行成本很高
- RDB文件使用特定二进制格式保存,存在老版本无法兼容新版本格式问题
AOF
以日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。解决了数据持久化的实时性,是Redis持久化的主流方式。
流程
- 命令写入
- 写入内容是文本协议格式:兼容性、避免二次处理开销、可读性方便直接修改和处理
- 先写入AOF缓冲:直接追加到硬盘,性能完全取决于当前硬盘负载。Redis提供多种缓冲区同步硬盘的策略,在性能和安全性方面做出了平衡
-
文件同步
-
AOF缓冲区同步文件策略:
- always:命令写入缓存区后调fsync同步到AOF文件
- everysec:命令写入aof_buf后调write操作,write完成后线程返回。fsync同步文件操作由专门线程每秒调用一次
- no:命令写入aof_buf后调write操作,不对AOF文件做fsync同步,同步硬盘由操作系统负责,周期最长30秒
-
-
文件重写
- 解决问题:命令不断写入AOF,文件越来越大
- 操作:把Redis进程内的数据转化为写命令同步到新AOF文件过程
-
原因:
- 进程内超时数据不再写入
- 旧的AOF文件含有无效命令
-
多条写命令可以合并为一个
-
触发
- 手动触发:bgrewriteaof命令
- 自动触发: auto-aof-rewrite-min-size(运行AOF重写时文件最小体积)和auto-aof-rewrite-percentage(当前AOF文件空间和上一次重写后AOF文件空间的比值)
-
重启加载
- 服务器重启时的数据恢复
以上是关于Redis持久化的主要内容,如果未能解决你的问题,请参考以下文章