redis详解之数据备份与恢复

2023-11-09

一、数据备份

Redis所有数据都是保存在内存中,Redis数据备份可以定期的通过异步方式保存到磁盘上,该方式称为半持久化模式,如果每一次数据变化都写入aof文件里面,则称为全持久化模式。本章节通过配置文件,触发快照的方式,恢复数据的操作,优缺点来学习 Redis 的重点知识——数据备份与恢复

1、方式一:半持久化RDB模式(Redis DataBase)【redis备份默认方式】

通过快照完成,由用户在redis.conf配置文件中设置两个参数:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时,redis会自动将内存中的所有数据进行快照并存储在硬盘上,完成数据备份。备份文件名称:dump.rdb

save <seconds> <changes>
# save ""
save 900 1
save 300 10
save 60 10000

注:save <指定时间间隔> <执行指定次数更新操作>,官方出厂配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘。可设置多个条件,但条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。如果想禁用自动快照,只需要将所有的save参数删除即可。

拍桌!下面进入问答环节:

Q:通过快照方式完成备份的过程是怎样的?

A:redis使用fork函数复制一份当前进程(父进程)的副本(子进程),父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件,当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成

Q:子线程快照过程中,父线程更改数据会影响备份吗?

A:不会影响。执行fork的时操作系统会使用写时复制(copy-on-write)策略,即fork函数发生的一刻父子进程共享同一内存数据,当父进程要更改其中某片数据时,操作系统会将该片数据复制一份以保证子进程的数据不受影响,所以新的RDB文件存储的是执行fork一刻的内存数据。

Q:除了redis自动执行快照,还可以手动执行吗?

A:当然可以,发送 SAVE 和 BGSAVE 命令可以让redis执行快照,两个命令的区别在于,前者是由主进程进行快照操作,会阻塞住其他请求,后者会通过fork子进程进行快照操作。

Q:说了这么多,RDB有哪些优缺点?

A:RDB优点: ① 适合大规模的数据恢复。② 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。

缺点:
① 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。
② 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。
所以Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。

2、方式二:全持久化AOF模式(Append Only File)

Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些,开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改该名称。

AOF持久化参数配置:

appendonly  yes                    #开启AOF持久化功能;
appendfilename appendonly.aof          #AOF持久化保存文件名;
appendfsync always                     #每次执行写入都会执行同步,最安全也最慢;
#appendfsync everysec                  #每秒执行一次同步操作;
#appendfsync no                    #不主动进行同步操作,而是完全交由操作系统来做,每30秒一次,最快也最不安全;
auto-aof-rewrite-percentage  100      #当AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据;
auto-aof-rewrite-min-size    64mb      #允许重写的最小AOF文件大小配置写入AOF文件后,要求系统刷新硬盘缓存的机制。

Q:从配置文件哪里可以修改备份方式为AOF?

A:打开 redis.conf 文件,找到 APPEND ONLY MODE 对应内容,开启需要手动把no改为yes

appendonly yes

Q:AOF既然采用日志的形式记录写操作,那会不会越来越多?

A:AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多。所以聪明的 Redis 新增了重写机制。当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩。

重写的原理:Redis 会fork出一条新进程,读取内存中的数据,并重新写到一个临时文件中。并没有读取旧文件,最后替换旧的aof文件。

触发机制:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。这里的“一倍”和“64M” 可以通过配置文件修改。

Q:AOF的优缺点是什么?

A:优点:数据的完整性和一致性更高
缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。

二、数据恢复

1、RDB数据恢复

Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,根据数据量大小与结构和服务器性能不同,通常将一个记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需花费20~30秒钟。

2、AOF数据恢复

重新启动Redis后Redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据更少,可以在redis.conf中通过appendonly参数开启Redis AOF全持久化模式。

三、总结

  • Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。
  • RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
  • Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。
  • AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
  • Redis 针对 AOF文件大的问题,提供重写的瘦身机制。
  • 若只打算用Redis 做缓存,可以关闭持久化。
  • 若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。

四、参考

1、Redis数据备份与恢复 - 流年晕开时光 - 博客园

2、Redis 持久化之RDB和AOF - ITDragon龙 - 博客园

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis详解之数据备份与恢复 的相关文章

随机推荐

  • 封玩家IP和机器码以及解开被封的教程

    封玩家IP和机器码以及解开被封的教程 关于封玩家IP地址的方法 可能在十多年前的第一代传奇引擎上就有了 但封机器码的功能 是GOM以后才看到的 早先的引擎上面并没有这个功能 比如HERO或者LEG等 虽然十多年前就有 但还是有不少GM 在开
  • Photomatix Pro for Mac HDR图像处理器

    Photomatix Pro是一款专业的HDR 高动态范围 照片处理软件 可以帮助用户将多张不同曝光度的照片合成一张高质量的HDR照片 并提供了丰富的HDR处理工具和效果 可以让用户轻松地创建出令人惊叹的HDR照片 Photomatix P
  • tesseract 训练---别人的东东

    关于tesseract ocr3的训练和使用 众所周知 这是一个出色的字符识别软件 这个开源项目可以在http code google com p tesseract ocr downloads list下载 在使用时 建议使用3而不要使用
  • OBS CLR插件开发

    本文所述的OBS 插件编写基于OBS CLRHostPlugin 使用C 语言写成 IDE为VS2012 完整代码详见Github 仓库地址 Part 创建工程 首先创建一个C 的项目 项目类型为类库 ClassLibrary 使用 NET
  • 多个类操作同一个Ui界面的方法(音乐播放器前期总结)

    最近自己在做类似于QQ音乐的播放器 用Qt模仿它的界面去写的 本地音乐播放功能差不多实现 除了歌词 现在已实现的功能 1 本地歌曲播放 2 播放 暂停 下一首 上一首 3 从文件夹添加歌曲至本地歌曲列表并显示 同时添加至数据库 数据库保存歌
  • Android 查看签名文件的MD5 SHA1值

    1 找到存放签名文件所在的文件夹 2 输入命令 keytool list v keystore atui jks 3 输入口令 keystore jks签名文件的密码
  • 机器学习--梯度下降法(BGD、SGD、MBGD)

    1 梯度 在微积分里面 对多元函数的参数求 part 偏导数 把求得的各个参数的偏导数以向量的形式写出来 就是梯度 比如函数 f x y f x y 分别对 x y x y求偏导数 求得的梯度向量就是 xf yf T frac part p
  • Ubuntu sudo 出现unable to resolve host 解决方法

    Ubuntu sudo 出现unable to resolve host 解决方法 Ubuntu环境执行sudo的时候都会 弹出如下的警告 上面大概的意思就是 sudo 无法解决主机 iZwz90a11x50xdx5dle0wgZ 我们可以
  • MySQL学习系列(4)-每天学习10个知识

    目录 1 InnoDB 和 MyISAM 2 SQL调优 3 数据一致性问题的解决 4 MySQL的存储引擎 5 MySQL的内存使用问题 6 索引比全表扫描慢的情况 7 行级锁和表级锁 8 MySQL的复制功能 9 数据库性能测试 10
  • CentOS8使用network.service服务管理网络

    前言 在CentOS8中 我们常用的network service服务就被NetworkManager service服务代替了 同样的 IP的配置方法也发生了改变 那么如果想使用network service服务去管理 配置系统网络怎么办
  • C语言实现扫雷 【递归扩展】 【超详细解析】

    扫雷游戏介绍 扫雷 是一款大众类的益智小游戏 于1992年发行 游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子 同时避免踩雷 踩到一个雷即全盘皆输 游戏规则 扫雷是电脑上一款非常经典的单机游戏 它的基本规则是 如果你点击一个
  • Linphone的简单使用

    目前参与了几个SIP项目 用到了几个软件 回过头来写下使用过程吧 使用的软电话是一个叫做Linphone的软件 首先拿到的是一个安装版的 感觉用不了几次 就没有安装 后来看到还有一个用QT编写的绿色版 就使用了该版本 界面简洁 QT绿色版
  • idea必备插件

    最近公司开发工具从 eclipse 全部切换到了 IntelliJ IDEA 为了提升公司开发效率 所以从网上搜集了一些常用的 IntelliJ IDEA 实用的开发插件 用于提升团队开发效率 现在在这里进行分享 让更多的人能够提升开发效率
  • http重定向流程与https证书校验流程

    http重定向 原理 在 HTTP 协议中 重定向操作由服务器通过发送特殊的响应 即 redirects 而触发 HTTP 协议的重定向响应的状态码为 3xx 浏览器在接收到重定向响应的时候 会自动采用该响应提供的新的 URL 并立即进行加
  • 10种不同类型的移动UI设计模式

    编者按 图灵教育 推荐了 移动应用UI设计模式 一书 在书中用户体验设计师Theresa Neil 介绍了包括反模式在内的10种不同类型的设计模式 无论你正在设计一款简单的iPhone应用 还是开发适用于当前市场上所有流行移动操作系统的应用
  • 【MATLAB第52期】#源码分享

    MATLAB第52期 源码分享 基于MATLAB的高斯过程GPR超参数 sigma 自动优化算法 时间序列预测模型 五折交叉验证 后台私信回复 52期 即可免费获取数据及代码 一 效果展示 二 优化思路 1 数据 一列时间序列数据 滑动窗口
  • 【数据挖掘】属性的概念

    1 属性 一个数据字段 表示数据对象的一个特征 属性 数据挖掘和数据库人员使用 维 数据仓库 特征 机器学习 变量可以互换实用 统计学家使用 2 标称属性 标称意味着 与名称相关 标称属性的值是一些符号或失误的名称 每个只代表某种类别 编码
  • 层次聚类matlab代码_MATLAB实现聚类分析

    点击标题下 蓝色微信名 可快速关注 MATLAB聚类算法K means聚类与层次聚类 1 kmeans聚类 聚类算法是一种根据初始点不断迭代 最后将数据聚类的过程 matlab中实现Kmeans常用聚类函数如下 IDX C kmeans X
  • 小程序顶部导航栏标题不居中

    小程序默认在andriod中居左 ios中居中 解决方法 自定义导航栏 小程序去掉顶部导航栏 window backgroundTextStyle light navigationBarBackgroundColor 666 navigat
  • redis详解之数据备份与恢复

    一 数据备份 Redis所有数据都是保存在内存中 Redis数据备份可以定期的通过异步方式保存到磁盘上 该方式称为半持久化模式 如果每一次数据变化都写入aof文件里面 则称为全持久化模式 本章节通过配置文件 触发快照的方式 恢复数据的操作