1. Redis提供两种持久化方式 : RDB 和AOF

bgsave 命令的运作流程

RDB优点:

是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照非常实用于备份,全量复制等场景。比如每6小时执行bgsave备份,并吧文件拷贝到远程机器或者文件系统中 hdfs ,用于灾难恢复。

RDB恢复数据远远快于AOF方式

缺点:

RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。

RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法箭筒新版RDB格式的问题。

AOF工作流程

AOF解决了实时性持久化数据问题 采用文本协议格式

原因是: 很好的兼容性、开启AOF后,所有写入命令都包含追加操作,直接采用协议格式,避免了二次处理开销、

文本协议具有可读性,方便直接修改和处理。

AOF为啥把命令追加到aof_bug中?

redis使用单线程响应命令,如果每次写AOF文件命令都直接加到硬盘,那么性能完全取决于当前硬盘负载。写写入缓冲区aof_bug中,可以提供多种缓冲区同步硬盘的策略,在性能和安全性方面做出平衡。

2.RDB使用一次性生成内存快照的方式,无法做到实时持久化,一般用于数据冷备和复制传输。

3.AOF通过追加写命令到文件实现持久化,通过appendfsync 参数可以控制实时/秒级持久化。因为需要不断追加写命令,所以AOF文件体积逐渐变大,需要定期执行重写操作来降低文件体积。

4. save命令会阻塞主线程不建议使用,bgsave命令通过fork操作创建子进程生成RDB避免阻塞。

5.AOF重写可以通过 auto-aof-rewrite-min-size 和 auto-aof-rewrite-percentage 参数控制自动触发,也可以使用bgrewriteaof命令手动触发。

AOF重写运作流程

6. 子进程执行期间使用copy-on-write 机制与父进程共享内存,避免内存消耗翻倍。AOF重写期间还需要维护重写缓冲区,保存新的写入命令避免数据丢失。

7.持久化阻塞主线程场景有: fork阻塞 和 AOF 追加阻塞。 fork 阻塞时间跟内存量和系统有关,AOF追加阻塞说明硬盘资源紧张。

8..单机下部署多个实例时,为了防止出现多个子进程执行重写操作,建议做隔离控制,避免CPU和IO资源竞争。

everysec 刷盘策略的过程

轮询控制AOF重写

Redis开发与运维之第五章持久化相关推荐

  1. Redis开发与运维 必备-电子书

    Redis开发与运维电子书 fulei出版 链接: https://pan.baidu.com/s/12rlHhOKP7_72GE8a74lN1g 密码: eep2 复制这段内容后打开百度网盘手机Ap ...

  2. 「Redis开发与运维」读书笔记

    第一章 初识Redis Redis的8个重要特性 速度快 内存存储数据 C语言实现 单线程架构,避免多线程竞争问题 Redis源码优化好 基于键值对的数据结构服务器 Redis 值可支持多种数据结构, ...

  3. <Redis开发与运维>一书阅读笔记记录

    文章目录 前言 第1章:初始redis 盛赞redis redis特性 redis使用场景 第2章:API的理解和使用 预备知识 全局命令 数据结构和内部编码 单线程架构 字符串 命令 内部编码 典型 ...

  4. 《Redis开发与运维》读书笔记--初识Redis(一)

    目录 盛赞Redis Redis特性 redis使用场景 redis可以做什么? redis不可以做什么? 关于用好redis的两点建议 本章重点回顾 写在前面: 想必在写项目的过程中,我们很多时候都 ...

  5. 读书笔记:redis开发与运维 基础篇

     redis特性    1>速度快:redis所有数据都是存放在内存中,是redis速度快的主要原因,是有c编写,一般来说用c编写的程序距离操作系统近,执行速度更快,非阻塞I/O,使用epoll ...

  6. Redis开发与运维笔记_1 初识2 API

    目录 概述 第1章 初识Redis 1.1 盛赞Redis 1.2 Redis特性 1.3 配置.启动.操作.关闭Redis 第2章 API的理解和使用 2.1 预备 2.1.1 全局命令 2.1.2 ...

  7. 【Redis】《Redis 开发与运维》笔记-Chapter12-开发运维的“ 陷阱”

    十二.开发运维的" 陷阱" 1.Linux配置优化之内存分配控制 1)vm.overcommit_memory Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多 ...

  8. Redis 开发与运维

    Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...

  9. 《Redis开发与运维》各章重点回顾

    第 1 章 初识 Redis Redis 8个特性:速度快.基于键值对的数据结构服务器.功能丰富.简单稳定.客户端语言多.持久化.主从复制.支持高可用和分布式. Redis 不是万金油,有些场景不适合 ...

  10. Redis理解内存《Redis开发与运维读书笔记》

    文章目录 内存的消耗 内存划分 内存管理 内存优化 内存的消耗 可以使用info memory 查看内存消耗. 内存划分 对象内存 = sizeof(key) + sizeof(value) 应避免使 ...

最新文章

  1. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
  2. 批量增加文件夹C语言实现
  3. Maven手动将jar包放入本地仓库
  4. mllib java怎么调用_如何准备mllib中的训练数据
  5. 【拔刀吧少年】之正则表达式
  6. 关于USB-AUDIO使用ALSA编程的一点问题
  7. leetcode53 Maximum Subarray 最大连续子数组
  8. 前端学习(2981):Json格式转换
  9. JavaScript中本地对象、内置对象和宿主对象
  10. java中的action是指什么_Struts2【开发Action】知识要点
  11. 查找-------(HashCode)哈希表的原理
  12. sap后台配置原因代码_【MM配置】Inventory Management 库存管理
  13. 手机有没有必要经常更新系统?
  14. mysql 大表查询慢_mysql大表查询慢怎么优化?
  15. 使用python制作ArcGIS插件(4)界面交互
  16. Java 实现发送Http请求
  17. java 串口通信读取电子秤
  18. 测试睡眠质量软件,测睡眠质量的app排行榜:推荐10款有趣又有效的睡眠APP
  19. 顶级的 18 款开源低代码开发平台
  20. Mysql primary key主键冲突的可能性与解决方案

热门文章

  1. web前端性能优化的方法
  2. Unity3D实现AB包加载资源
  3. 计算机科学技术编程基础教程
  4. php递归算法的简单示例,php递归函数 php递归算法经典实例大全 | 帮助信息-动天数据...
  5. multism中ui和uo应该怎么表示_multisim12中XBP1怎么使用
  6. 【数据分享】中国城市统计年鉴_2001-2021年
  7. Python OpenCV 美女换装,图像处理取经之旅第 19 天
  8. 网页版 html5 斗地主,HTML5版单机斗地主
  9. webstorm破解之jar包破解(2018)
  10. AutoLayout 讲解