Redis02-持久化策略

目录

RDB(Redis DataBase Backup file)

RDB执行原理

AOF(Append-Only File)

RDB和AOF对比



Redis支持多种持久化方式,以确保数据在内存中持久存储,以便在Redis服务器重启时数据不会丢失。Redis中持久化的两种主要实现方式:RDB和AOF。

RDB(Redis DataBase Backup file)

RDB是Redis的快照持久化方式,它会在指定的时间间隔内生成数据快照并将其保存到磁盘上的一个文件中。RDB文件包含了数据库的数据和键的过期时间信息。RDB持久化是一个点对点的持久化方式,它适用于数据快照的定期备份,以及在Redis服务重启时快速恢复数据。

RDB持久化可以通过配置文件设置,允许管理员指定快照的保存频率和文件名。RDB文件通常以二进制格式存储,可以通过SAVEBGSAVE命令手动触发持久化。

[root@10 ~]# redis-cli -h 127.0.0.1 -p 6379 -a 'password' #用密码方式连接
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> save  #由Redis主进程执行RDB,会阻塞所有命令
OK
127.0.0.1:6379> bgsave  #开启子进程执行RDB,避免主线程受影响
Background saving started
127.0.0.1:6379> 

Redis内部有触发RDB的机制,在redis.conf文件中:

# Save the DB to disk.
#
# save <seconds> <changes>
#
# Redis will save the DB if both the given number of seconds and the given
# number of write operations against the DB occurred.
#
# Snapshotting can be completely disabled with a single empty string argument
# as in following example:
#
# save ""
#
# Unless specified otherwise, by default Redis will save the DB:
#   * After 3600 seconds (an hour) if at least 1 key changed
#   * After 300 seconds (5 minutes) if at least 100 keys changed
#   * After 60 seconds if at least 10000 keys changed
#
# You can set these explicitly by uncommenting the three following lines.
#
# save 3600 1
# save 300 100
# save 60 10000

说明一下:

# save "" 这是禁用RDB
save 3600 1 # 表示每小时有至少1个key发生变化,就执行bgsave
save 300 100 # 表示每5分钟有至少100个key发生变化,就执行bgsave
save 60 10000 # 表示每1分钟有至少10000个key发生变化,就执行bgsave
RDB执行原理
  1. Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)。

  2. 父进程接收处理客户端命令,子进程将内存中的数据写入硬盘中的临时文件。

  3. 当子进程写入完所有数据后,使用临时文件替换旧的RDB文件,至此一次快照操作完成。

需要注意的是:

  • 页表:记录虚拟地址与物理地址的映射关系(操作系统:用户空间程序只能访问虚拟内存,而不是直接操作物理内存)。

  • Fork采用的是一种copy-on-write的策略,目的是防止数组脏写:

    • 父进程读数据时共享读取

    • 父进程写数据是拷贝副本单独写操作

  • 在最近一次RDB和下一次RDB间隔期间出现Redis服务宕机,是会丢失这批数据的。

Redis启动后会读取RDB文件,文件是压缩过的二进制格式。占用空间小,利于传输和恢复。读取的时间根据服务器性能、数据结构、数据量大小会有不同差异。通常一个记录1000万个字符串类型键、大小为1GB的快照文件载入内存需要花费20-30秒。

RDB实现持久化,一旦出现异常退出,恢复的时候只能恢复到最近一次RDB的节点数据。如果数据比较重要,希望将损失降到最小,那么可以使用AOF进行持久化。

AOF(Append-Only File)

AOF是Redis的追加日志持久化方式,它将每个写操作(包括SET、INCR等)追加到一个日志文件中,以记录数据库操作的历史。AOF文件包含了一系列命令,它们可以用于重建数据库状态。

AOF持久化可以通过配置文件设置,可以选择以同步(fsync)或异步(no fsync)方式将操作追加到AOF文件中。同步方式可以保证数据的完整性,但通常会降低性能。异步方式则更快,但在发生故障时可能会导致数据丢失。

AOF默认是关闭的,在redis.conf文件进行设置:

# 是否开启AOF,默认是no
appendonly yes 
# AOF文件的名称
appendfilename "appendonly.aof"

AOF的命令记录的频率(也叫刷盘策略)是可以通过redis.conf配置的:

# appendfsync always 表示每执行一次写命令,立即记录到AOF文件 
appendfsync everysec # 推荐的,也是默认的每秒刷盘策略
# appendfsync no 表示写命令执行完先放到AOF缓冲区,由操作系统决定何时将缓冲区内容写入磁盘
配置项刷盘时机优点缺点
Always同步刷盘可靠性高,几乎不丢数据性能影响大
everysec每秒刷盘性能适中最多丢失1秒数据
no操作系统控制性能最好可靠性较差,可能丢失大量数据

由于AOF记录的是写命令,文件比RDB大的多。而且AOF会记录对同一个key的多次操作,但只有最后一次写操作才有意义。我们可以通过bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同的结果。

AOF也会在触发阈值时自动重写AOF文件。阈值可以在redis.cof配置:

# AOF文件比上次增长超过多少百分比触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积达到多少触发重写
auto-aof-rewrite-min-size 64mb
RDB和AOF对比
** **RDBAOF
持久化方式定时对整个内存做快照记录每一次执行的命令
数据完整性不完整,两次备份之间会丢失相对完整,取决于刷盘策略
文件大小会有压缩,文件体积小记录命令,文件体积很大
宕机恢复速度很快
数据恢复优先级低,因为数据完整性不如AOF高,因为数据完整性更高
系统资源占用高,大量CPU和内存消耗低,主要是磁盘IO资源但AOF重写时会占用大量CPU和内存资源
使用场景可以容忍数分钟的数据丢失,追求更快的启动速度对数据安全性要求较高常见

两者各有优缺点,而实际的项目中往往是结合一起使用的,以提供更可靠的数据保护。在Redis重启时,会优先使用AOF日志文件来恢复数据,因为AOF记录了更详细的操作历史。如果AOF文件不存在或损坏,Redis可以使用RDB文件来进行数据恢复。

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

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

相关文章

Android Studio(列表视图ListView)

前言 前面在适配器章节&#xff0c;已经介绍了ListView的作用(干什么的)&#xff0c;这节将主要介绍如何去设计ListView页面视图。 思考 列表视图需要些什么&#xff1f; 1. 列表项容器&#xff08;装载各列表项的容器&#xff09;&#xff1a;<ListView/> 2. 列表项布局…

MySQL数据脱敏(Data masking plugin functions)

对于企业而言&#xff0c;数据脱敏可以在数据共享或测试时用于保护敏感数据&#xff08;如信用卡&#xff0c;社保卡&#xff0c;地址等&#xff09;。通过对敏感数据进行脱敏处理&#xff0c;组织可以最大限度地降低数据泄露和未经授权访问的风险&#xff0c;同时仍能够使用真…

AI技术再刷屏!明星集体“说”外语,有何风险?

近日&#xff0c;一段美国歌手泰勒斯威夫特“说”中文的短视频在网络刷屏&#xff0c;引发热议。 视频中&#xff0c;泰勒斯威夫特“说”着流利中文&#xff0c;音色和讲母语时的音色类似&#xff0c;甚至连口型都能对上。 类似的视频还有很多外国人“说”地道中文、很多中国…

智能制造与网络升级:制造业企业应对未来的关键步骤

新一代信息技术正在和制造业加快融合发展&#xff0c;网络是企业数字化转型的基石&#xff0c;推进智能制造&#xff0c;需要升级网络支撑工业互联网平台的搭建、数字化车间、智能工厂的建设等等。 如何打造满足“智造”企业组网需求的网络&#xff1f; 企业总部、分支机构、工…

C++ 类的定义相关选择题及其答案

1、有以下程序&#xff1a; #include<iostream> using namespace std; class A{ public: A(){cout<<"A";} }; class B{public:B(){cout<<"B";}}; class C:public A{ B b; public: C(){cout<<"C";} }; int main(){ C ob…

figma-如何批量修改字体

一.选择字体 二.批量替换 编辑—>替换相同字体

UI设计工具都哪些常用的,推荐这5款

对于UI设计师来说&#xff0c;日常工作无非是围绕“需求分析”→设计实施→“开发交付”这三个环节来进行。 然而&#xff0c;在每个环节中&#xff0c;设计师使用的工具却完全不同。在这里&#xff0c;我收集整理了UI设计师在日常工作中常用的五种工具&#xff0c;希望能为新…

【ChatOCR】OCR+LLM定制化关键信息抽取(附开源大语言模型汇总整理)

目录 背景技术方案存在的问题及解决思路关键信息提取结果其他解决方案替换文心一言LangChain大型多模态模型&#xff08;Large Multimodal Model, LMM&#xff09; 开源大模型汇总LLaMA —— Meta 大语言模型Stanford Alpaca —— 指令调优的 LLaMA 模型Lit-LLaMA —— 基于 na…

数据结构线性表——单链表

前言&#xff1a;小伙伴们又见面啦&#xff0c;这篇文章我们来一起学习线性表的第二模块——单链表。 单链表的学习就要开始上强度啦&#xff0c;小伙伴们一定要努力&#xff0c;坚持&#xff01; 目录 一.什么是单链表 二.单链表与顺序表的区别 三.单链表的实现 1.单链表…

ClickHouse 学习之从高级到监控以及备份(二)

第 一 部分 高级篇 第 1 章 Explain 查看执行计划 在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能可以看到&#xff0c;并且只能真正执行 sql&#xff0c;在执行日志里面查看。在 20.6 版本引入了原生的执行计划的语法。在 20.6.3 版本成…

【MongoDB】集群搭建实战 | 副本集 Replica-Set | 分片集群 Shard-Cluster | 安全认证

文章目录 MongoDB 集群架构副本集主节点选举原则搭建副本集主节点从节点仲裁节点 连接节点添加副本从节点添加仲裁者节点删除节点 副本集读写操作副本集中的方法 分片集群分片集群架构目标第一个副本集第二个副本集配置集初始化副本集路由集添加分片开启分片集合分片删除分片 安…

第23期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

Java 高效生成按指定间隔连续递增的列表(int,double)

简介 Java 按照指定间隔生成连续递增的List 列表&#xff08;引入Stream 类和流操作来提高效率&#xff09;&#xff1a; 1. 生成递增的List< Integer> Testpublic void test009(){int start 1;int interval 2;int count 10;List<Integer> list IntStream.ite…

华为云运维小结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、pandas是什么&#xff1f; 一、pandas是什么&#xff1f; HCIP学习笔记-华为云运维方案-9&#xff1a;https://blog.csdn.net/GoNewWay/article/details/13152…

【亚马逊云科技产品测评】活动征文|亚马逊云科技AWS之EC2详细测评

引言 &#xff08;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道&#xff09; 在当前的数字化时代&#xff0c;云服务已…

密钥管理系统功能及作用简介 安当加密

密钥管理系统的功能主要包括密钥生成、密钥注入、密钥备份、密钥恢复、密钥更新、密钥导出和服务&#xff0c;以及密钥的销毁等。 密钥生成&#xff1a;通过输入一到多组的密钥种子&#xff0c;按照可再现或不可再现的模式生成所需要的密钥。一般采用不可再现模式作为密钥生成…

算法题:203. 移除链表元素(递归法、设置虚拟头节点法等3种方法)Java实现创建链表与解析链表

1、算法思路 讲一下设置虚拟头节点的那个方法&#xff0c;设置一个新节点指向原来链表的头节点&#xff0c;这样我们就可以通过判断链表的当前节点的后继节点值是不是目标删除值&#xff0c;来判断是否删除这个后继节点了。如果不设置虚拟头节点&#xff0c;则需要将头节点和后…

【SpringSecurity】简介

SpringSecurity简介 Spring Security 的前身是Acegi Security&#xff0c;在被收纳为Spring 子项目后正式更名为Spring Security。Spring Security目前已经到了6.x&#xff0c;并且加入了原生OAuth2.0框架&#xff0c;支持更加现代化的密码加密方式。可以预见&#xff0c;在Ja…

HDFS速通之一文详解HDFS全部知识点

文章目录 HDFS介绍HDFS体系HDFS的Shell介绍HDFS的常见Shell操作 HDFS案例实操Java操作HDFS配置环境 HDFS的回收站HDFS的安全模式实战&#xff1a;定时上传数据至HDFSHDFS的高可用和高扩展HDFS的高可用(HA)HDFS的高扩展(Federation) HDFS介绍 HDFS是一个分布式的文件系统 假设…

采用XML作为GUI描述语言

设计方案采用XML作为GUI描述语言的机制主要包括以下几个方面: 模型定义:使用XML定义GUI组件的模型,包括组件的名称、类型、属性、事件等。布局管理:使用XML定义GUI组件的布局,包括组件之间的相对位置、大小、对齐方式等。数据绑定:使用XML定义GUI组件的数据绑定方式,包括数据来…