Redis的两种持久化机制
Redis的两种持久化机制
1、持久化机制
client--->redis(内存)--->内存数据-数据持久化--->磁盘
两种方法
- 快照(Snapshot)
- AOF(Append Only File)只追加日志文件
2、快照
2.1 特点
这种方式可以将某一时刻的所有数据写入到硬盘中,这也是redis的默认开启持久化方式,保存的文件是以.rdb结尾的文件,因此这种方式也被称为RDB方式。官方的说法叫快照持久化。

2.2 快照生成方式
客户端方式:BGSAVE和SAVE指令
服务器配置自动触发
客户端方式1:BGSAVE
客户端可以使用BGSAVE命令来创建一个快照,当接收到客户端的这个命令后,redis会调用fork操作来创建一个子进程,然后子进程负责把这个快照写入到磁盘中,而父进程继续处理命令请求 什么是fork:fork是linux系统的调用:在当前进程中,fork一个子进程,子进程最初与主进程是共享一份内存区域的。由于主进程不断进行数据的写操作,与子进程存在并发冲突问题。此时,redis采用写时复制技术(cow):
当主进程写操作时,首先会复制一份将要涉及写操作的内存页。然后主进程在新复制的内存页上进行写操作,原有内存页继续供子进程持久化。

客户端方式2:SAVE
客户端还可以使用SAVE命令来创建一个快照,接收到SAVE命令的redis服务器会在快照创建完毕之前不再响应任何其他命令
注意:SAVE命令并不常用,使用SAVE命令在快照创建完毕之前,redis处于阻塞状态,无法对外服务

服务器配置自动触发:
如果用户在redis.conf中设置了save配置选项,redis会在save选项条件满足之后自动触发一次BGSAVE命令,如果设置多个save配置选项,每当任意一个save配置选项条件满足,redis也会触发一次BGSAVE命令
服务器接收客户端shutdown指令
- 当redis通过shutdown指令接收到关闭服务器的请求时,会执行一个save命令,阻塞所有的客户端,不再执行客户端执行发送的任何命令,并且在save命令执行完毕之后关闭服务器
3.AOF方式——只追加日志文件
3.1 特点
这种方式可以将所有客户端执行的写命令记录到日志文件中,AOF持久化会将被执行的写命令写到AOF的文件末尾,来记录数据发生的变化,因此只要redis从头到尾执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件的记录的数据集。

3.2 开启AOF持久化
1.修改 appendonly yes 开启持久化
2.修改 appendfilename "appendonly.aof" 指定生成文件名称


3.3 日志追加频率
1.always[谨慎使用]
说明:每个redis命令都要同步写入硬盘,严重降低redis速度,这种方式可以将发生系统崩溃时丢失的数据减少到最少,但是由于这种方式要对硬盘进行大量的写入操作,所以redis处理命令的速度会受到硬盘性能的限制。机械硬盘在这种频率下200左右个命令/s ;固态硬盘(SSD)大概几百万个命令/s;使用SSD用户请谨慎使用always选项,这种模式不断写入少量数据的做法有可能会引发严重的`写入放大`问题,导致将固态硬盘的寿命从原来的几年降低为几个月。
2.everysec[推荐默认]
说明:每秒执行一次同步,将多个写命令同步到磁盘。即使系统崩溃也最多丢失一秒的数据。
3.no[不推荐]
说明:完全由操作系统决定什么时候同步AOF文件,这个选项不会对redis性能带来影响,但是当系统崩溃时,会丢失不定量的数据,甚至是全部数据。另外如果用户硬盘处理写入操作不够快的话,当缓冲区被等待写入硬盘数据填满时,redis会处于阻塞状态,并导致redis的处理命令请求的速度变慢。
3.4 修改同步频率
修改appendfsync everysec|always|no 指定
3.5 AOF文件的重写
3.5.1 出现的问题
AOF方式会出现一个问题,持久化文件会越来越大,例如我们调用incr test命令100次,文件中必须保存全部的100条命令,其实有99条都是多余的。因为要恢复数据库的状态其实文件中保存一条set test 100就够了。为了压缩aof的持久化文件Redis提供了AOF重写机制
3.5.2 AOF重写
用来在一定程度上减少AOF文件的体积,并且保证数据不丢失
3.5.3 触发AOF重写的方式
1.客户端方式
执行BGREWRITEAOF命令,不会阻塞redis服务
2.服务器配置方式自动触发
配置redis.conf中的auto-aof-rewrite-percentage选项 参加下图↓↓↓
- 如果设置auto-aof-rewrite-percentage值为100和auto-aof-rewrite-min-size 64mb,并且启用的AOF持久化时,那么当AOF文件体积大于64M,并且AOF文件的体积比上一次重写之后体积大了至少一倍(100%)时,会自动触发,如果重写过于频繁,用户可以考虑将auto-aof-rewrite-percentage设置为更大

3.5.4 重写原理
开启AOF持久化后生成一个appendonlydir文件夹,这个文件夹下有如下三个文件

从Redis 7.0.0 开始,Redis使用了多部分AOF 机制。也就是将原来的单个AOF文件拆分为基础文件(最多一个)和增量文件(可能不止一个)。基本文件表示重写AOF 时存在的数据的初始(RDB 或 AOF 格式)快照。所有这些文件都放在一个单独的目录中,并由清单文件跟踪。

重写过程:在触发AOF重写后,redis调用fork创建一个子进程,子进程根据此时的数据状态生成快照,同时主进程会创建一个新的增量文件用来继续处理客户端传来的命令请求,子进程将这个快照文件以命令的形式写入临时文件,当快照往临时文件写完后,通知主进程把新的增量文件和子进程生成的基础文件构建成临时清单,并将其持久化,redis对清单文件进行原子交换,使AOF重写的结果生效,生成一个新的基础文件,并且创建一个新的aof增量文件来接收命令。

4.持久化总结
两种持久化方案既可以同时使用,又可以单独使用,在某种情况下也可以都不使用,具体使用那种持久化方案取决于用户的数据和应用决定。
无论使用AOF还是快照机制持久化,将数据持久化到硬盘都是有必要的,除了持久化外,用户还应该对持久化的文件进行备份(最好备份在多个不同地方)。
Redis的两种持久化机制的更多相关文章
- Redis系列之----Redis的两种持久化机制(RDB和AOF)
Redis的两种持久化机制(RDB和AOF) 什么是持久化 Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望 ...
- 详解Redis中两种持久化机制RDB和AOF(面试常问,工作常用)
redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Ap ...
- 详解Redis中两种持久化机制RDB和AOF
redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Ap ...
- 9. 图解分析Redis的RDB和AOF两种持久化机制的原理
1.RDB和AOF两种持久化机制的介绍 2.RDB持久化机制的优点3.RDB持久化机制的缺点4.AOF持久化机制的优点5.AOF持久化机制的缺点6.RDB和AOF到底该如何选择 我们已经知道对于一个企 ...
- 10.Redis的RDB和AOF两种持久化机制的优劣势对比
1.RDB和AOF两种持久化机制的介绍 2.RDB持久化机制的优点3.RDB持久化机制的缺点4.AOF持久化机制的优点5.AOF持久化机制的缺点6.RDB和AOF到底该如何选择 我们已经知道对于一个企 ...
- Redis学习一:Redis两种持久化机制
申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis是基于内存来实现的NO SQL数据库,但是我么你都 ...
- redis的RDB和AOF两种持久化机制
思维导图:我的redis基础知识汇总 RDB持久化机制的优点 (1)RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中redis的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的 ...
- Redis的两种持久化方式-快照持久化和AOF持久化
Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为"持久化"效 ...
- 分析RedisRDB和AOF两种持久化机制的工作原理及优劣势
一.RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周期性的持久化 AOF机制对每条写入命令作为日志,以append-only(追加)的模式写入一个日志文件中,在redi ...
随机推荐
- 面试官:Dubbo怎么实现服务降级,他有什么好处?
哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 书接上回,今天周一了,招聘软件 ...
- Mac Book安装Windows发烫的问题
Mac Book安装Windows后,电脑发烫,风扇一直高速旋转.针对此问题百度搜索了一下, 大多数人说更改电源选项,由"平衡"模式改为"节能"模式,亲身体验了 ...
- ShardingSphere-proxy-5.0.0分布式雪花ID生成(三)
一.目的 保证在分库分表中每条数据具有唯一性 二.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Founda ...
- 教你如何用网页开发APP
用到的工具: HBuilderX app开发版1.首先你得网站必须是上线的,然后明确这一点后,点击打开HBuilderX.在文件里找到新建项目,选择wap2App,将下面信息填写完整,然后创建. 2. ...
- FS2K人脸素描属性识别
人脸素描属性识别 代码:https://github.com/linkcao/FS2K_extract 问题分析 需要根据FS2K数据集进行训练和测试,实现输入一张图片,输出该图片的属性特征信息,提取 ...
- 关于NAND FLASH解扣的认识
NAND FLASH是现在非常重要的存储介质,根据出厂时厂家检测结果可分为原片(正片).白片和黑片. 所谓原片就是NAND FLASH生产厂商挑选出来的最好的晶圆,切割下来经过了各项测试之后封装成成品 ...
- ArrayList分析2 :Itr、ListIterator以及SubList中的坑
ArrayList分析2 : Itr.ListIterator以及SubList中的坑 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/16409137.html ...
- (数据库提权——Redis)Redis未授权访问漏洞总结
一.介绍 1.Redis数据库 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...
- 干货 |《2022B2B新增长系列之企服行业橙皮书》重磅发布
企服行业面临的宏观环境和微观环境已然发生了明显的变化.一方面,消费级互联网成为过去式,爆发式增长的时代结束.资本.媒体的目光已经悄然聚焦到以企服行业所代表的产品互联网身上,B2B企业正稳步走向C位. ...
- StringBuilder的构造方法和append方法
Java中StringBuilder的构造方法 StringBuilder构造方法: public StringBuilder(): 创建一个空白可变的字符串对象,不含有任何内容 public Str ...