第03讲:Redis的持久化方案

news2025/2/2 14:48:34

前言

        redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
redis提供两种持久化方式:

  • RDB:快照,通过从服务器保存和持久化
  • AOF:日志,操作生成相关日志,并通过日志来恢复数据。couchDB对于数据内容,不修改,只追加,则文件本身就是日志,不会丢失数据.
    注意:redis默认开启了RDB持久化

一、RDB模式

        在指定的时间间隔内将内存中的数据快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

Ps:fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程,在每次redis服务器启动的时候,会自动把dump.rdb这个文件的键值对 全部读取到内存

操作步骤如下:

第1步:设置RDB模式

编辑redis.conf文件,命令如下

cd /usr/local/bin
vi redis.conf

RDB快照相关参数说明:

	save 900 1    #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
	save 300 10  #必须是300秒之后至少10个关键字发生变化。
	save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
	上面三个参数屏闭后,rdb方式就关闭了
	
	stop-writes-on-bgsave-error yes    #后台存储错误停止写。
	rdbcompression yes    #使用LZF压缩rdb文件。
	rdbchecksum yes    #存储和加载rdb文件时校验。
	dbfilename dump.rdb    #设置rdb文件名。
	dir ./    #设置工作目录,rdb文件会写入该目录。

以下图片截自默认的redis.conf文件设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第2步:重启redis查看数据是否存在

  • 先删除dump.rdb

  • 使用客户端连接并添加数据

  • 杀掉redis进程

pkill -9 redis
  • 启动redis查看数据是否存在

Tip: RDB的缺陷:在2个保存点之间断电,将会丢失1-N分钟的数据,所以出于对持久化的更精细的要求,redis增添了aof的方式 append only file 持久化数据

二、AOF模式

思路:可以设置数据的追加频次,比如内存每写一条,就备份一条,也可以按照时间间隔,比如每1秒钟就备份一次
缺点:文件大,写操作频繁。

Tips:

  • 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),
  • 只许追加文件但不可以改写文件,redis启动之初会读取该文件(aof文件)重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
  • aof保存的是appendonly.aof文件

第1步:设置RDB模式

编辑redis.conf文件,命令如下

cd /usr/local/bin
vi redis.conf

AOF日志相关参数:

	appendonly no # 是否打开aof日志功能  no:不开启   yes:开启日志
	appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢
				everysec # 折衷方案,每秒写1次
				no      # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快
	no-appendfsync-on-rewrite  yes: # 正在导出rdb快照的过程中,要不要停止同步aof

如果要更改持久化方案为aof模式,可以按照以下图片来设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第2步:重启redis查看aof文件

保存退出并杀掉redis进程

pkill -9 redis

在这里插入图片描述

打印日志文件内容

more /usr/local/bin/appendonly.aof

在这里插入图片描述

三、关于持久化的总结

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大
  • 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
  • 同时开启两种持久化方式
    在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。
  • 性能建议
    因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。AOF好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。代价一是带来了持续的IO,二是AOF rewrite是将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。如果不Enable AOF ,仅靠Master-Slave Replication实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。新浪微博就选用了这种架构

扩展1、AOF重写

思考:如果对同一个key进行多次操作,在aof日志中怎样表现操作记录,一条还是n条?

1.1、案例:创建age并改变五次值

在这里插入图片描述
在这里插入图片描述
:日志会将每一步操作都记录,如果要对一个key操作多次,在数据上的表现只有一个但在日志中会有n条记录。当数据丢失需要找回数据的时候怎样找到正确的值?
:aof重写是将内存中的key和value逆化为redis命令重新保存到日志中,就好像是将所执行的操作做了一个总结。

1.2、设置AOF重写的相关参数

编辑redis.conf文件,命令如下

cd /usr/local/bin
vi redis.conf

可以调整如下参数:

aof重写相关参数:
	auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
	auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

扩展2、关于aof的问答环节

问: 在dump rdb过程中,aof如果停止同步,会不会丢失?

答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.

问: aof重写是指什么?

答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.以解决 aof日志过大的问题.

问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?

答: aof

问: 2种是否可以同时用?

答: 可以,而且推荐这么做

问: 恢复时rdb和aof哪个恢复的快

答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行

扩展3、面试怎么说?

3.1、RDB(Redis DataBase)

        通过快照将某一时刻的所有数据写入磁盘,这是redis默认使用的持久化方案,保存的文件是以.rdb形式为后缀(默认的文件名为dump.rdb),因此这种文件被称为RDB文件;
        RDB提供了两种方式持久化数据,分别是save和bgsave,save是阻塞的,当执行缓存时不再接受客户端的命令;bgsave是非阻塞的,当执行缓存时系统会fork一个子进程进行持久化,这不会影响处理客户端的命令,由于是异步操作,所以在进行持久化过程中,如果此时客户端写入了数据,这些数据将不会被持久化。
        我们可以在redis.conf配置文件中通过save属性设置自动触发,save有两个参数m、n,表示每m秒内至少有n个key的值发生变化时触发,比如save 60, 10000,则表示在60秒内有一万个key值发生变化时进行RDB操作。

3.2、AOF(Append Only File)

        redis会将每一个收到的写命令都通过write函数追加到文件中,通俗的理解就是日志记录。AOP也有3种触发机制,分别是每次改同步、每秒同步、不同步:

  • 每次改同步(always):同步操作,每次发生数据变化的时候都会都会立即记录到磁盘,这种方式性能较差但是数据完整性较高;
  • 每秒同步(every sec):异步操作,每秒中同步持久化一次数据,如果发生宕机,则最多丢失1秒钟的数据,性能较好,数据完整性较高;
  • 不同步(no):从不同步。

3.3、关于两种持久化方案该如何选择?

在恢复速度上:RDB较快,AOF较慢;
在数据安全性上:RDB会丢数据,AOF需要根据策略决定;
在体积上:RDB较小,AOF较大;
在轻重上:RDB属于重量级,AOF属于轻量级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Codeforces Round #839 (Div. 3) A~G all answer

Dashboard - Codeforces Round #839 (Div. 3) - Codeforces 最近状态奇差无比,还有点生病,低烧反复横跳,应该没阳?(虽然家人都阳了,就剩我一个了wuwuwu~(A B C就不作解释了&#xff…

【小5聊】Python3 使用selenium模块实现简单爬虫系列一

第一次听说Python还是在工作的时候,还是一位女生在用,当时她说可以用来处理excel文档,特别是一些统计分析。第二次让我真正进入python世界,还是在一次C站举办的大赛上。聊聊你是因为什么机缘巧合进入到python圈的呢?不…

金盾杯2022-AGCTFS战队 wp

文章目录Web图书馆EzPHPeZphp2SQLSkip有来无回反败为胜Crypto小菜一碟RRSSAAsimpleRrandMISC盗梦空间qianda0_Sudoku数据泄露01-账号泄露追踪数据泄露02-泄露的密码数据泄露03-泄露的密钥ReverseTeaPwnLoginWtfWeb 图书馆 根据提示找到 干货|最全的Tomcat漏洞复现…

Qt5 网页标题、关键词提取工具Findyou

Qt5 网页标题、关键词提取工具Findyou 一、程序运行 运行界面 辅助功能,可用于将扫描器的扫描结果转换为url 二、所涉及的重要知识点 1、Qt爬取https的网页 来自宇龍_ https://blog.csdn.net/qq_45809384/article/details/122049295?spm1001.2014.3001.5506 打…

Foxmail客户端添加163账号和邮件备份163邮箱

文章目录一、Foxmail添加163账号1. 点击图标2. 账号管理3. 新建4. 手动设置5. 填写信息6. 创建二、邮件转移备份2.1. 邮件折叠2.2. 选择目标邮箱2.3. 同步服务端Foxmail客户端添加163账号的具体步骤如下:一、Foxmail添加163账号 1. 点击图标 首先打开Foxmail客户端…

51寻找数组中出现次数超一半的数

51寻找数组中出现次数超一半的数 一看题目就想用hash表,但是要求空间复杂度为1,说明不可以用哈希表去存。一直在原地数组上思考,类似桶排序,可是这取决于数值的大小,最后还是看了题解,学到了。 思想是&…

外汇天眼:一笔赚了12600美元 你羡慕吗?

在外汇投资中,黑平台一直是外汇投资圈的一枚毒瘤,不能顺利出金也是外汇投资面临的最大风险之一。 对于外汇投资者而言,外汇交易平台的选择至关重要。 选择好的外汇交易平台,最重要的是:选择安全可靠的平台&#xff0…

Blackmagic黑魔法摄像机braw视频帧损坏文件修复方法

Blackmagic是全球知名的影视级产品供应商,其高清摄像机是国内外各种剧组的最爱。Blackmagic的新产品目前使用braw格式,其编码采用自定义的raw编码,视频的效果和阿莱不相上下。之前我们已经多次介绍过这种braw文件的修复,近期我们处…

grpc的使用

GRPC学习 本文包括grpc的入门使用和四种实现方式 文章目录一、GRPC 安装和hello world1、什么是GRPC2、安装grpc和代码3、服务端3.1、取出 server3.2、挂载方法3.3、注册服务3.4、创建监听4、客户端二、protobuf语法三、GRPC server 的使用1、普通服务2、流式传入(客…

通达信破解接口怎么委托下单?

通达信破解接口主要是利用数学公式建立模型,通过大量数据判断未来价格走势,通过程序选股。虽然选股也比较广泛,但也能覆盖A股市场的四千多只股票,能排除强行涨跌等人为因素,执行的纪律性强。所以对于通达信破解接口对股…

【笔记】git 修改之前的提交记录信息(git commit -m ‘...‘)

文章目录一、修改最后一条提交记录信息二、修改前面某条或某几条提交记录信息一、修改最后一条提交记录信息 git commit --amend进入vi编辑器后: 按i下方出现’- - 插入 - -‘的提示时,便可编辑提交记录信息按ESC,输入:wq保存退出&#xff0…

ICG衍生物ICG-Sulfo-OSu的产品描述及保存建议

中文名称 ICG-Sulfo-OSu 英文名字 ICG-Sulfo-OSu 凯新生物描述: (ICG)是一种用于医学诊断的菁染料它用于测定心输出量、肝功能和肝血流,以及眼科血管造影它的峰值光谱吸收接近800 nm这些红外频率穿透视网膜层,使ICG血管造影能够比…

【STA】(2)概念

目录 1.CMOS逻辑设计 1.1 基本MOS结构 1.2 COMS逻辑门 1.3 标准单元 2.CMOS单元建模 3.电平翻转波形 4.传播延迟 5.波形的转换率 6.信号之间的偏移 7. 时序弧和单调性 8.最小和最大时序路径 9.时钟域 10.工作条件 1.CMOS逻辑设计 1.1 基本MOS结构 MOS(Metal Oxide…

2022年Python笔试选择题及答案(秋招)

2022年Python笔试选择题及答案(秋招) 🏠个人主页:编程ID 🧑个人简介:大家好,我是编程ID,一个想要与大家共同进步的程序员儿 🧑如果各位哥哥姐姐在准备面试,找…

【Redis-11】Redis事务实现原理

Redis通过MULTI、EXEC、WATCH等命令来实现事务的功能,事务提供了一种将多个命令请求打包,然后一次性,顺序性的执行多个命令的机制。在事务执行期间,服务器不会中断事务去执行其他客户端的命令,他会讲事务中所有命令执行…

谈主成分分析/因子分析中的特征值“矩阵近似”

主成分分析和因子分析是数据降维的常用手段,其中以特征值为载体,在不断降维“近似”原本的协方差矩阵。 CSDN中一些文章在介绍这个问题或者叫“特征值分解”时,讲得都比较学术化,今天用一个小例子,还是面向新人&#…

Redis高可用之哨兵机制实现细节

Redis高可用之哨兵机制实现细节 本文来自我的 technotes [1] Redis篇,欢迎你常来逛逛。 正文 在上一篇的文章《Redis高可用全景一览》中,我们学习了 Redis 的高可用性。高可用性有两方面含义:一是服务少中断,二是数据少丢失。主…

【树莓派不吃灰】兄弟连篇⑥ Linux系统进程管理

目录1、进程查看1.1 ps1.2 top1.3 pstree2、终止进程2.1 kill2.2 killall2.3 pkill3、工作管理4、系统资源查看4.1 vmstat 监控系统资源4.2 dmesg 开机内核检测信息4.3 free 查看内存使用4.4 查看cpu信息4.5 uptime4.6 uname4.7 判断当前系统位数4.8 查询当前linux发行版本4.9 …

Windows及Kail安装配置

apache在kali环境搭建 Kali虚拟机中是包含有Apache的,在/etc目录下ls即可显示出来, 所以这里只需要进行配置就可以了。 图1.1 Apache2目录 打开Apache服务,开启后可以使用status命令查看服务状态。 /etc/init.d/apache2 start /etc/init.d…

【5】控制语句

指针 Go中不用“->”运算符,用的是 “.” 选择符“&”:取地址符“*”:访问目标对象符默认值为:nil (不是NULL)、- -:作为语句,只可以自己放一行,而且放在右边(不是表达式) …