(六)redis持久化操作(RDBAOF)

news2024/11/18 13:31:56

目录

一、RDB(Redis DataBase)

1、简介

2、持久化流程

3、dump.rdb文件

4、配置文件

5、rdb的备份

6、rdb的恢复

7、优势

8、劣势

二、AOF(Append Only File)

1、简介

2、持久化流程

3、AOF和RDB同时开启

4、AOF启动

5、AOF恢复

 6、AOF同步频率设置

7、优势

8、劣势

三、总结,用哪个

1、官方建议

2、性能建议


一、RDB(Redis DataBase

1、简介

1.1 是什么

在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

1.2 备份是如何执行的

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

1.3 Fork

Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。

2、持久化流程

3、dump.rdb文件

在redis.conf中配置文件名称,默认为dump.rdb。
rdb文件的保存路径,也可以修改。默认为Redis启动时命令行所在的目录下。

4、配置文件

sava:这里是用来配置触发 Redis的持久化条件,也就是什么时候将内存中的数据保存到硬盘。默认如下配置:

save 3600 1       # 表示3600 秒内如果至少有 1 个 key 的值变化,则保存
save 300 100      # 表示300 秒内如果至少有 100 个 key 的值变化,则保存
save 60 10000     # 表示60 秒内如果至少有 10000 个 key 的值变化,则保存

stop-writes-on-bgsave-error:默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。

rdbcompression:默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

rdbchecksum:默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

dbfilename:设置快照的文件名,默认是 dump.rdb

dir:设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名。

5、rdb的备份

5.1 先通过config get dir 查询rdb文件的目录

5.2 将*.rdb文件拷贝到别的地方

6、rdb的恢复

6.1 关闭redis

6.2 先把备份的文件拷贝到工作目录下

6.3 启动Redis, 备份数据会直接加载

7、优势

  • 适合大规模的数据恢复
  • 对数据完整性和一致性要求不高更适合使用
  • 节省磁盘空间
  • 恢复速度快

8、劣势

  • Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。
  • 虽然Redisfork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
  • 在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

二、AOF(Append Only File

1、简介

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

2、持久化流程

  • 客户端的请求写命令会被append追加到AOF缓冲区内
  • AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中
  • AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量
  • Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的

 

3、AOF和RDB同时开启

AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)

4、AOF启动

默认不开启aof,修改默认的appendonly no,改为yes。重启redis服务。

aof文件的保存路径,同RDB的路径一致。可以在redis.conf中配置文件名称,默认为 appendonly.aof

5、AOF恢复

AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。

5.1 正常恢复

  • 修改默认的appendonly no,改为yes
  • 将有数据的aof文件复制一份保存到对应目录(查看目录:config get dir)
  • 恢复:重启redis然后重新加载

5.2 异常恢复

  • 修改默认的appendonly no,改为yes
  • 如遇到AOF文件损坏,通过/usr/local/bin/redis-check-aof--fix appendonly.aof进行恢复
  • 备份被写坏的AOF文件
  • 恢复:重启redis,然后重新加载

 6、AOF同步频率设置

  • appendfsync always:始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好。
  • appendfsync everysec:每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。
  • appendfsync no:redis不主动进行同步,把同步时机交给操作系统

7、优势

  • 备份机制更稳健,丢失数据概率更低
  • 可读的日志文本,通过操作AOF稳健,可以处理误操作

8、劣势

  • 比起RDB占用更多的磁盘空间
  • 恢复备份速度要慢
  • 每次读写都同步的话,有一定的性能压力
  • 存在个别Bug,造成恢复不能

三、总结,用哪个

官方推荐两个都启用。如果对数据不敏感,可以选单独用RDB。

不建议单独用 AOF,因为可能会出现Bug。

如果只是做纯内存缓存,可以都不用

1、官方建议

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.

Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大

  • 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
  • 同时开启两种持久化方式
  • 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据, 因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.
  • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢? 建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份) 快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。

2、性能建议

  • 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。
  • 如果使用AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。

  • 代价,一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。

  • 只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。

  • 默认超过原大小100%大小时重写可以改到适当的数值。

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

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

相关文章

HTML中引入CSS样式的第三种方式:链入外部样式表文件

<!-- 第三种方式&#xff1a;链入外部样式表文件&#xff0c;这种方式最常用。 就是将样式写到一个独立的xxx.css文件当中&#xff0c;在需要的网页上直接引入这个xxx.css文件就可以了。 语法格式&#xff1a; <head> …

【自学Docker 】Docker port命令

Docker port命令 概述 docker port命令教程 docker port 命令可以用于列出指定的 Docker容器 的端口映射&#xff0c;或者将容器里的端口映射到宿主机。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker port语法 haicoder(www.haicoder.net)# docke…

jsp 校园相册管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 校园相册管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统采用web模式开发&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#xf…

计算机组成原理 | 第五章:输入输出系统 | 程序中断方式

文章目录&#x1f4da;概述&#x1f407;I/O系统的概述&#x1f407;输入输出系统的组成&#x1f407;I/O设备与主机的联系&#x1f407;I/O设备与主机信息传送的控制方式&#x1f4da;I/O接口&#x1f407;为什么要设置接口❓&#x1f407;接口的功能和组成&#x1f407;接口和…

Pygame的SurfaceImageTime

Surface用来生成一个矩形&#xff0c;Image用来导入外部图片&#xff0c;Time用来暂停时间。 Surface 生成矩形 facepy.Surface((200,200))填充颜色 face.fill(blue) 放入界面 screen.blit(face,(50,50)) Image 导入图片 imgpy.image.load(d:\\图片\\1.jpg) 缩放…

make prerequisite: 根据文件状态自动确定是否重新执行

Basic 先看一个简单的例子&#xff08;引自Makefile Tutorial By Example&#xff09;&#xff1a;当我们对同一个makefile执行两次make命令时&#xff0c;由于第一次运行已经生成了目标文件blah&#xff0c;第二次make会直接输出blah is up to date&#xff0c;而不会重新com…

(四)Redis配置文件redis.conf详解

目录 一、Units单位 二、INCLUDES&#xff08;包含配置&#xff09; 三、NETWORK&#xff08;网络配置&#xff09; 四、GENERAL&#xff08;总则&#xff09; 五、SNAPSHOTTING&#xff08;拍摄快照&#xff09; 六、REPLICATION&#xff08;复制&#xff09; 七、SECU…

【苹果相册日历推位置推送iMessage】需要将真机的udid复制出来在此添加

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

通过伪代码结合理论模拟pc端接入单点登录(Oauth2浙里办)

前言 还记得那是一个惺忪的早晨&#xff0c;带着困意的我正准备去公司上班&#xff0c;坐车坐到一半&#xff0c;钉钉突然袭来一条红色预警信息&#xff0c;公司查出来有个人阳了&#xff0c;好消息&#xff1a;万幸我还在去公司的路上&#xff0c;没有和他有过多的接触&#x…

机器学习中的数学原理——对数似然函数

这个专栏主要是用来分享一下我在 机器学习中的 学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎 私信或者评论区留言&#xff01;这一篇就更新一下《 白话机器学习中的数学——对数似然函数》&#xff01; 目录 一、什么是对数似然函数…

SD卡打不开怎么办?sd卡损坏修复,盘点一些实用的教程

SD卡的应用十分广泛&#xff0c;比如&#xff0c;手机、数码相机、摄像机、MP4、航拍器、车载导航等。但是随着SD卡的使用时间的长短&#xff0c;有时会出现常见问题—SD卡打不开。SD卡里面保持着我们很多重要数据&#xff0c;如果它打不开&#xff0c;很可能导致我们里面重要数…

CSS倒影炫酷属性 -webkit-box-reflect 的使用

文章目录效果预览一、相关知识点介绍属性相关二、实现步骤总结效果预览 一、相关知识点 介绍 文档 MDN关于倒影属性介绍&#xff1a;https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-box-reflect 官方说明&#xff1a; 非标准:该特性是非标准的&#xff0c;不在标…

CCF BDCI|算能赛题决赛选手说明论文-05

基于TPU平台实现人群密度估计 队伍&#xff1a;SO-FAST 宋礼 算法工程师 京东科技 中国-北京 song200626163.com柯嵩宇计算机科学与技术专业 博士 上海交通大学 中国-上海 songyukesjtu.edu.cn包锴楠计算机科学与技术 硕士 西南交通大学 中国-成都 baokainan123gmail…

元宇宙构建基石:三维重建技术

如今“元宇宙”概念爆火&#xff0c;作为前沿数字科技发展的集成体之一&#xff0c;元宇宙正成为诸多产业寻求破局的全新风口。元宇宙是利用科技手段进行链接与创造&#xff0c;与现实世界映射和交互的虚拟世界&#xff0c;具备新型社会体系的数字生活空间&#xff1b;其本质上…

Day11 蓝桥杯+Java中LocalDate类——关于日期跳转题【2015省赛星系炸弹】(相比C++,Java的LocalDate是真的香!!!)

今天刷蓝桥杯的题&#xff0c;用CAC了之后&#xff0c;发现解析里有兄弟用Java的LocalDate类做的&#xff0c;步骤极其简洁&#xff0c;【由于寒假开始学过一点Java】所以我特意去搜了搜LocalDate类&#xff0c;发现解这种题真的很好使&#xff01;&#xff01;&#xff01;废话…

高级性能测试系列《39.终极线程组可以模拟出压力测试场景吗?》

一、回顾1.面向目标场景&#xff1a;Arrivals Thread Group&#xff0c;这个可以面向tps。Concurrency Thread Group&#xff0c;可以设置面向多少个并发用户数。2.波浪型场景&#xff1a;Ultimate Thread Group 波浪型场景。在添加第二行时&#xff0c;初始化时间点要大于等于…

Makefile的使用 和 基本语法 及Makefile中变量的使用【入门必看】

MakefileMakefile概要为啥要使用MakefileMakefile的使用Makefile的语法&#xff08;重点&#xff09;Makefile实际使用&#xff08;重点&#xff09;利用Makefile删除详解Makefile指令&#xff08;重点&#xff09;Makefile多命令选项Makefile的选择编译特性强制执行总结Makefi…

使用 Keras 深度学习库进行CNN 图像识别

Keras 是一个用于深度学习的 Python 库&#xff0c;它封装了强大的数值库 Theano 和 TensorFlow。 在本文中&#xff0c;你将了解如何在 Keras 中开发和评估用于图像识别的深度学习模型。完成本文后&#xff0c;你将了解&#xff1a; 关于 CIFAR-10 对象分类数据集以及如何在…

Pyrene-PEG5-propargyl_1817735-33-3_芘甲酰胺五聚乙二醇丙炔

Pyrene-PEG5-propargyl&#xff0c;芘甲酰胺-五聚乙二醇-丙炔Product structure&#xff1a;Pyrene-PEG5-propargyl结构式Product specifications&#xff1a;1.CAS No&#xff1a;1817735-33-32.Molecular formula&#xff1a;C30H33NO63.Molecular weight&#xff1a;503.64.…

一文弄懂三色标记算法

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 你愈是少说你的伟大&#xff0c;我将愈想到你的伟大。——培根 文章目录三色标记算法增量更新原始快照面试官&#xff1a;我们先从JVM基础开始问&#xff0c;了解三色标记算法吗&#xff1f;我&#xff1a;额…