第5章 持久化

Redis支持RDB和AOF两种持久化机制,有效避免因进程退出造成的数据丢失问题。

1. RDB

RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发过程分为手动触发和自动触发。

1.1 触发机制

  • save命令:阻塞当前Redis服务器,知道RDB过程完成
  • bgsave命令:fork创建子进程来负责持久化过程

1.2 流程说明

bgsave流程.jpg

1.3 RDB文件的处理

  • 保存:在dir配置目录下
  • 压缩:LZF算法进行压缩处理

1.4 优缺点

  1. 紧凑压缩的二进制文件,适合备份全量复制场景
  2. 加载恢复快
  3. 没办法做到实时持久化/秒级持久化,每次fork成本高
  4. 二进制格式特定,不兼容

2. AOF(append only file)

以独立日志的方式每次写命令,重启时再重新执行命令达到恢复数据的目的。解决了实时性

2.1 使用AOF

AOF工作流程.jpg

2.2 命令写入

写入文本协议格式:兼容性,可读性
追加到缓冲区

2.3 文件同步

多重AOF缓冲区同步文件策略


AOF缓冲区同步文件策略.jpg

Linux系统调用write和fsync:

  • write操作会出发延迟写,linux在内核提供页缓冲区来提高IO性能,同步硬盘操作依赖于系统调度机制。同步之前如果系统故障,则缓冲区内数据丢失
  • fsync针对单个文件操作,强制硬盘同步,fsync将阻塞知道写入硬盘完成后返回,保证了数据持久化

2.4 重写机制

AOF文件重写是吧Redis进程内的数据转化为写命令同步到新AOF文件的过程
(可以理解为当前所有数据搞成一个AOF文件)

  1. 进程内超时数据不再写入
  2. 旧的AOF文件含有无效命令
  3. 多条写命令可以合并为一个
AOF重写运作流程.jpg

注意上图中,子进程生成新AOF文件的时候,父进程还在响应命令,这部分命令要放到aof_rewrite_buf缓冲区,最后合并到新的AOF文件。

2.5 重启加载

流程:开启AOF时,优先加载AOF

Redis持久化文件加载流程.jpg

2.6 文件校验

加载损坏的AOF文件会拒绝启动,万一结尾不完整(掉电),也可以兼容一下,只会警告。

3. 问题定位与优化

持久化功能很容易影响性能

3.1 fork操作

fork操作耗时问题对线上应用延迟影响明显

3.2 子进程开销监控和优化

  1. CPU
  2. 内存
  3. 硬盘开销分析优化

优化思路:避免和其他竞争资源的服务一起部署

3.3 AOF追加阻塞

Redis使用另一条线程每秒执行fsync同步硬盘,当硬盘繁忙时,会造成主线程阻塞。所以不能每次操作都fsync确认,而是两秒一次。

使用everysec做刷盘策略的流程.jpg

4. 多实例部署

Redis是单线程架构,所以会在一台机器上部署多个Redis实例,都开启AOF重写会产生对CPU和IO的竞争。
所以通过外部程序轮询控制AOF重写操作的执行。

  1. 外部程序监控机器上所有Redis实例
  2. 对于开启AOF的实例,查看确认增长率
  3. 增长率超过特定阈值时,手动触发当前实例重写
  4. 运行期间循环检查,直到AOF重写结束
  5. 确认实例AOF重写完成后,再检查其他实例并重复操作,保证机器内每个Redis实例AOF重写串行化执行
轮询控制AOF重写.jpg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 一:快照模式 或莫过于SNAPSHOTTING模式,这个不需要反驳吧,而且你可能还知道,使用SNAPSHOTTIN...
    kevin0016阅读 626评论 0 1
  • Redis 提供了多种不同级别的持久化方式: 了解 RDB 持久化和 AOF 持久化之间的异同是非常重要的, 以下...
    笑Skr人啊阅读 460评论 0 1
  • 为防止数据丢失,需要将 Redis 中的数据从内存中 dump 到磁盘,这就是持久化。Redis 提供两种持久化方...
    你是妖怪吧阅读 529评论 0 3
  • 实现两个 app 的跳转 这里我创建了两个 demo. 名字叫 A 和 B . 现在要想从 A 跳转到 B...
    UILable攻城狮阅读 353评论 1 0
  • 真心不爱读外国著作,翻译的文字毫无美感,草草翻完这本热销书。总体还行,值得一看。 又是一个内心忏悔,自我救赎的故事...
    菡萏半妆阅读 181评论 0 0