iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >redis 详解(4)持久化
  • 529
分享到

redis 详解(4)持久化

redis详解(4)持久化 2020-07-06 01:07:23 529人浏览 无得
摘要

定义 Redis 所有数据保存在内存中,对数据更新将异步保存到磁盘 持久化的作用 方式 说明 快照 Mysql dump,redis RDB 日志 mysql binlog,redis AOF,HBase Hlog

定义

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命令

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

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

您可能感兴趣的文档:

--结束END--

本文标题: redis 详解(4)持久化

本文链接: https://www.lsjlt.com/news/3221.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作