我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis 详解(4)持久化

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis 详解(4)持久化

定义

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),我们一起学习,一起进步

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis 详解(4)持久化

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

下载Word文档

猜你喜欢

redis 详解(4)持久化

定义redis 所有数据保存在内存中,对数据更新将异步保存到磁盘持久化的作用方式说明快照mysql dump,redis RDB日志mysql binlog,redis AOF,hbase HlogRDB定义redis 创建二进制的 RDB 文件redis 启
redis 详解(4)持久化
2020-07-06

Redis 持久化详解

http://www.redis.cn/topics/persistence.html持久化Redis 如同其他的存储组件一样,提供了两类持久化方式:快照,和全量追加日志。RDB - 快照在默认情况下, Redis 将数据库快照保存在名字为dump.rdb的
Redis 持久化详解
2015-08-16

Redis的持久化详解

目录一、Redis的持久化二、RDB(Redis DataBase)1、RDB快照原理2、RDB配置3、redis.conf 其他一些配置4、RDB的备份恢复5、RDB优缺点三、AOF(Append Of File)1、AOF原理2、AOF
2023-06-05

Redis持久化存储详解

为什么要做持久化存储? 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存。我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的丢失,因为当服务器关机等一些异常情况都会导致存储在内存中的数据丢失。
Redis持久化存储详解
2018-04-22

Redis教程(十):持久化详解

一、Redis提供了哪些持久化机制:1). RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2). AOF持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重
2022-06-04

Redis 的持久化

原文链接: https://www.changxuan.top/?p=1386 Redis 是一个非关系型的内存数据库,使用内存存储数据是它能够进行快速存取数据的原因之一。在实际应用中,常有人提倡把 Redis 只作为一种能够提高用户体验的组件来使用, 也就是
Redis 的持久化
2018-01-28

彻底理解Redis持久化

前言大家都知道Redis一个内存数据库,它支持2种持久化方式:RDB(Snapshot 内存快照),AOF(append only file)。持久化功能将内存中的数据同步到磁盘来避免Redis发生异常导致数据丢失的情况。当Redis实例重启时,即可利用之前持
彻底理解Redis持久化
2017-07-16

Redis两种持久化方案RDB和AOF详解

本文主要针对Redis 有两种持久化方案RDB和AOF做了详细的分析,希望我们整理的内容能够帮助大家对这个两种方案有更加深入的理解。 Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only
2022-06-04

Redis RDB与AOF持久化方式详细讲解

目录1.RDB持久化1.1 RDB文件的保存1.2 RDB文件的载入1.3 RDB持久化时服务器的状态1.4 RDB持久化策略2.AOF持久化2.1 持久化的实现2.2 文件的载入与数据还原2.3 AOF文件的重写1.RDB持久化&ems
2022-11-22

redis数据持久化

1 redis是内存型的数据库redis数据放在内存中重启服务器丢失数据重启redis服务丢失数据断电丢失数据为了防止redis数据丢失, 进行持久化, 所以将数据写入到一个文件中来实现2 rdb持久化在配置文件中, 添加rdb持久化参数vim redis-6
redis数据持久化
2021-06-10

redis持久化存储

redis持久化存储 redis持久化存储redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,redis为我们提供两种数据持久化存储方式:RD
redis持久化存储
2020-12-12

编程热搜

目录