redis 详解(4)持久化「建议收藏」

redis 详解(4)持久化「建议收藏」定义 redis 所有数据保存在内存中,对数据更新将异步保存到磁盘 持久化的作用 方式 说明 快照 mysql dump,redis RDB 日志 mysql binlog,redis AOF,hb…

定义

redis 所有数据保存在内存中,对数据更新将异步保存到磁盘

持久化的作用

方式 说明
快照 mysql dump,redis RDB
日志 mysql binlog,redis AOF,hbase Hlog

RDB

定义

  • redis 创建二进制的 RDB 文件
  • redis 启动载入已经存在的 RDB 文件

三种主要方式触发

save(同步)

  • client 发送 save 命令到 server,server 创建 RDB 文件,会阻塞主进程
  • 如果存在老文件,新文件会替换老文件
  • 时间复杂度 O(n)

bgsave(异步)

  • client 发送 bgsave 命令到 server,server fork 一个子进程创建 RDB 文件
  • server 返回给 client 成功信息
命令 save bgsave
IO 类型 同步 异步
是否阻塞 是,阻塞发送在 fork
时间复杂度 O(n) O(n)
优点 不会消耗额外内存 不阻塞客户端命令
缺点 阻塞客户端命令 需要 fork,消耗内存

自动配置

配置 seconds changes
save 900 1
save 300 10
save 60 10000

其他方式触发

  • 全量复制
  • debug reload
  • shutdown

总结

  • RDB 是 redis 内存到硬盘的快照,用于持久化
  • save 通常会阻塞 redis
  • bgsave 不会阻塞 redis,但是会 fork 新进程
  • save 自动配置满足任一就会被执行

AOF

RDB 现存问题

  • 耗时耗性能
  • 不可控,丢失数据

定义

  • 日志文件

三种策略

always

  • redis 写命令刷新到缓冲区,每条命令 fsync 到硬盘

everysec

  • redis 写命令刷新到缓冲区,每秒把缓冲区 fsync 到硬盘

no

  • redis 写命令刷新到缓冲区,操作系统决定什么时间 fsync 到硬盘
命令 always everysec no
优点 不丢失数据 每秒一次 fsync 不用管理
缺点 IO 开销大 丢一秒数据 不可控

重写

优势

  • 减少磁盘占用量
  • 加快恢复速度

实现方式

  • bgrewriteaof 命令 client 发送 bgrewriteaof 命令到 server,server fork 一个子进程执行 AOF 重写,创建 AOF 文件
  • aof 重写配置
配置名 说明
auto-aof-rewrite-min-size aof 文件重写需要的大小
auto-aof-rewrite-percentage aof 文件增长率
统计名 说明
aof_current_size aof 当前大小(单位:字节)
aof_base_size aof 上次启动和重写的大小(单位:字节)

自动触发时机

  • aof_current_size > auto-aof-rewrite-min-size
  • aof_current_size – aof_base_size/aof_base_size > auto-aof-rewrite-percentage

RDB 和 AOF 的选择

RDB 和 AOF 比较

命令 RDB AOF
启动优先级
体积
恢复速度
数据安全性 丢数据 根据策略决定
轻重

RDB 最佳策略

  • 关掉
  • 集中管理
  • 主从,从开

AOF 最佳策略

  • 开(缓存情况下关掉)
  • aof 重写集中管理
  • everysec

最佳策略

  • 小分片
  • 监控(硬盘,内存,负载,网络)
  • 足够内存
  • 缓存或存储

fork 操作

fork 操作

  • 同步操作
  • 和内存量相关,内存越大,耗时越长,与机器类型有关
  • info:latest_fork_usec

优化 fork

  • 优先使用物理机或者高效支持 fork 操作的虚拟化技术
  • 控制 redis 实例最大可用内存:maxmemory
  • 合理配置 Linux 内存分配策略:vm.overcommit_memory=1
  • 降低fork频率,例如放开aof重写机制自动触发时机,不必要的全量复制

进程外开销

子进程开销和优化

选项 开销 优化
CPU rdb和aof文件生成,属于CPU密集型 不做CPU绑定,不和CPU密集型部署
内存 fork内存开销,copy-on-write echo never > /sys/kernel/mm/transparent_hugepage/enabled
硬盘 aof和rdb文件写入,可以结合iostat,iotop分析 不要和高硬盘负载服务部署一起:存储服务,消息队列等;no-appendfsync-on-rewrite=yes,根据写入量决定磁盘类型;单机多实例持久化文件目录可以分盘

AOF 追加阻塞

阻塞定位

  • redis日志
  • info persistence命令

欢迎扫描下方二维码,持续关注:

redis 详解(4)持久化「建议收藏」

互联网工程师(id:phpstcn),我们一起学习,一起进步

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10463.html

(0)
上一篇 2022-12-27
下一篇 2022-12-27

相关推荐

  • Python代码实现列表添加元素的方法

    Python代码实现列表添加元素的方法在Python中,使用列表(list)存储一系列的元素是非常方便的。下面看看如何向列表添加元素。

    2024-01-06
    115
  • 技术分享 | MySQL:从库出现 system lock 的原因[亲测有效]

    技术分享 | MySQL:从库出现 system lock 的原因[亲测有效]作者:高鹏(网名八怪) 文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。 本文来源:转载自公众号-老叶茶馆 *爱可生开源社区出…

    2023-02-10
    137
  • MySQL之函数

    MySQL之函数关于函数的说明 概念:类似python中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名 好处: 隐藏了实现细节 提高代码的重用性 调用:select 函数名(实参列表) [from 表] 分类:

    2023-04-17
    157
  • Python List操作必备技能:提高开发效率,数据处理得心应手

    Python List操作必备技能:提高开发效率,数据处理得心应手Python中的List是一种非常基础且常用的数据类型,类似于数组,但是List可以更加灵活地处理数据,比如添加、删除和修改元素等操作,可以更加方便地对数据进行处理。在Python中,List被广泛地应用于数据处理、科学计算、机器学习等领域。本文将从多个方面为大家介绍Python List的操作技巧,包括List的创建、访问、添加、删除、修改、排序和遍历,希望能够对各位Python开发者提高开发效率,数据处理得心应手。

    2024-02-10
    97
  • ElasticSearch 文档的增删改查都不会?[通俗易懂]

    ElasticSearch 文档的增删改查都不会?[通俗易懂]本文主要是介绍 ElasticSearch 的文档增删改查和批量操作,同时会介绍一些 REST API 返回状态码的具体含义。 我们先来看下这个表: 这个表包含了 Index、Create、Read、

    2023-02-04
    150
  • python推荐系统案例(python推荐软件)

    python推荐系统案例(python推荐软件)Linux下图形一般都有qt和gtk两种形式,做界面设计都还不错。如果想用gtk的话可以安装Anjuta IDE支持C/C++、Python、Java多语言;如果想用qt的话可以用qt界面设计大师:)

    2023-12-02
    122
  • 使用Python Tutor调试Python代码

    使用Python Tutor调试Python代码在程序设计中,调试是一个不可避免的过程,Python程序也不例外。在调试过程中,如何快速定位和解决问题是至关重要的。Python Tutor是一款在线调试工具,它可以可视化Python代码执行过程,帮助开发者更好地理解和调试Python代码。

    2023-12-30
    113
  • 为什么说我国一定要自研5g手机芯片技术_5g技术和芯片有关吗

    为什么说我国一定要自研5g手机芯片技术_5g技术和芯片有关吗     最近偶然看到一篇这段时间小米销量下降的文章,想要和大家聊一聊为什么我国一定要自研5G手机芯片?首先大家要明白没有核心技术的手机厂商终究是走不远的,我国手机厂商们一定要大力投入到自研5G手机…

    2023-02-02
    157

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注