美文网首页
Redis 持久化

Redis 持久化

作者: 张三的生活 | 来源:发表于2020-07-09 16:01 被阅读0次

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文件结构

未完待续

相关文章

网友评论

      本文标题:Redis 持久化

      本文链接:https://www.haomeiwen.com/subject/qhdscktx.html