Redis 持久化

Redis 持久化

RDB

RDB 持久化方式类似于快照,执行 SAVE BGSAVE命令时可以触发 RDB 持久化,执行 shutdown 命令也会触发,其本质为 SAVE,设置自动触发本质是执行 BGSAVE 命令。在同时开启 RDB 和 AOF 是 redis 优先载入AOF。

SAVE 命令

SAVE 命令会阻塞 redis 服务器进程,直到 rdb 文件生成完成,期间 redis 服务器无法正常处理请求。

BGSAVE 命令

BGSAVE 命令会 fork 一个子进程生成 rdb 文件,期间 redis 服务器可以正常处理请求。

当执行 BGSAVE 命令时,服务器为了避免产生竞争,会拒绝 SAVE 命令和 BGSAVE 命令。

当执行 BGSAVE 命令时,客户端发送的 BGREWRITEAOF 命令会延迟到 BGSAVE 执行完后进行。

当执行 BGREWRITEAOF 时,服务器会拒绝客户段发送的 BGSAVE 命令。

redis 出于对性能的考虑,不同时执行 BGREWRITEAOF 和 BGSAVE 命令,因为这会产生两个子进程,同时进行大量的 IO 操作。

自动间隔保存实现

redis 每隔 100s 执行 serverCron 函数,改函数用于检查是已满足配置的自动保存条件,若满足则执行 BGSAVE 命令。

redis 自动保存rdb数据结构

数据结构如上所示,saveparams 为配置项, dirty 为计数器即对数据库进行了多少次更改,lastsave 为上次自动保存的时间。

RDB 文件结构

RDB 文件的大致结构如下,其中全大写表示常量。

rdb文件结构

未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容