高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?

如果有遗漏,评论区告诉我进行补充

面试官: Redis持久化有几种方式?

我回答:

  • Redis 是一个高性能的键值存储系统,常用于缓存、消息队列和实时数据分析等场景。为了保证数据的持久性,Redis 提供了两种主要的持久化方式:RDB(Redis Database Backup)和 AOF(Append Only File)。这两种方式各有优缺点,可以根据具体需求选择合适的持久化策略。

一、RDB(Redis DataBase)持久化

RDB 是一种快照形式的持久化方法,它会在指定的时间间隔内将内存中的数据集快照写入磁盘。RDB 文件是一个经过压缩的二进制文件,适合用于备份和灾难恢复。

定义
  • RDB是一种快照式的持久化方法,它定期将Redis内存中的数据生成快照(snapshot)并写入磁盘上的一个二进制文件中。这个文件包含了当前数据库的所有数据,包括键、值、数据类型等信息。
触发方式
  • 手动触发:通过执行SAVE或BGSAVE命令。其中,SAVE命令会阻塞Redis服务器,而BGSAVE命令在后台执行,不会阻塞Redis服务器的正常操作。
  • 自动触发:根据配置文件中设置的save规则(如save m n,表示m秒内数据发生n次修改时自动触发)自动进行快照。
特点
* RDB文件是经过压缩的二进制文件,体积小,便于备份和迁移。
* 恢复速度快,加载RDB文件可以直接重建数据集。
* 数据安全性相对较低,因为RDB文件是在某一时刻生成的,期间发生的更新可能丢失(取决于save规则间隔)。
优点
  • 性能高:RDB 持久化是通过 fork 子进程来完成的,主进程不会阻塞,因此对 Redis 性能影响较小。
  • 文件紧凑:RDB 文件是经过压缩的,占用的空间相对较小,适合用于备份和传输。
  • 恢复速度快:在服务器重启时,加载 RDB 文件的速度通常比 AOF 快。
缺点
  • 数据丢失风险:如果 Redis 在两次快照之间宕机,那么这段时间内的数据将会丢失。
  • fork 开销:在生成 RDB 文件的过程中,需要 fork 子进程,这可能会导致短暂的性能下降,特别是在大数据集的情况下。
配置
  • 可以通过 redis.conf 文件中的以下配置项来设置 RDB 持久化:

    save 900 1
    save 300 10
    save 60 10000
    
  • 上述配置表示:

    • 如果 900 秒内至少有 1 个键发生变化,则进行一次快照。
    • 如果 300 秒内至少有 10 个键发生变化,则进行一次快照。
    • 如果 60 秒内至少有 10000 个键发生变化,则进行一次快照。

二、AOF(Append Only File)持久化

AOF 是一种日志形式的持久化方法,它会记录服务器执行的所有写操作命令,并在服务器启动时重新执行这些命令以重建数据集。

定义
  • AOF持久化是将Redis执行的每一次写操作(即修改数据集的命令)以文本形式追加到一个日志文件中。这个文件包含了将数据库状态从空文件还原到当前状态所需的所有写操作。
配置方式
  • 通过配置文件redis.conf中的appendonly指令设置AOF持久化开启或关闭。
同步策略
* **always**:每条写命令都同步写入硬盘。
* **everysec**(默认):每秒将缓冲区内容写入硬盘,并且在后台异步刷盘。
* **no**:由操作系统决定何时同步,风险较高,容易丢失数据。
特点
* 数据安全性高,通过AOF文件可以精确还原写操作序列,丢失数据少。
* AOF文件大小通常大于RDB文件,且随写操作增多而增长。
* 重启恢复时,需要重新执行AOF文件中的所有命令,恢复速度相比RDB慢。
* 过度的写操作可能导致AOF文件过大,需要定期进行bgrewriteaof命令进行重写优化,将多条连续的写操作合并为更少的命令。
优点
  • 数据完整性:AOF 持久化可以提供更好的数据完整性,因为它记录了所有的写操作,即使服务器宕机,最多只会丢失最近的一个操作。
  • 可配置的同步策略:AOF 提供了不同的同步策略,如每秒同步、每次操作同步等,可以根据需求调整。
缺点
  • 文件较大:AOF 文件通常比 RDB 文件大,因为它是基于操作命令的日志。
  • 恢复速度较慢:在服务器重启时,AOF 文件的重放速度通常比 RDB 慢。
  • 性能开销:AOF 的写操作会有一定的性能开销,尤其是在高并发写入的情况下。
配置
  • 可以通过 redis.conf 文件中的以下配置项来设置 AOF 持久化:
appendonly yes
appendfsync everysec
  • 上述配置表示:

    • appendonly yes:启用 AOF 持久化。
    • appendfsync everysec:每秒钟同步一次 AOF 文件到磁盘。
  • 其他可用的 appendfsync 选项包括:

    • no:不主动同步,由操作系统决定何时同步。
    • always:每次写操作都同步,安全性最高但性能最低。

三、混合持久化

  1. 定义:Redis 4.0及以后版本支持混合持久化,即在执行BGSAVE时,既生成RDB文件,又将自上次RDB保存以来的增量AOF日志写入到RDB文件末尾。

  2. 优点

    • 利用RDB的快速加载特性快速恢复大部分数据。
    • 再通过加载增量AOF日志补全RDB之后的部分数据,确保数据完整性。
    • 一定程度上结合了RDB和AOF的优点,兼顾数据安全性和恢复速度。

四、总结

  • RDB 适用于需要快速恢复且对数据一致性要求不高的场景。
  • AOF 适用于对数据完整性要求较高的场景,尤其是当数据丢失会造成严重影响时。
  • 混合使用 可以结合两者的优点,提供更高的数据安全性和恢复速度。
    在实际应用中,可以根据业务需求选择合适的持久化策略。如果对数据丢失容忍度低,优先考虑AOF;如果追求快速恢复且有足够的备份机制,可选择RDB。同时,还可以考虑同时使用RDB和AOF两种持久化方式,以充分利用它们各自的优势。无论选择哪种持久化方式,都应配合定期备份策略,进一步增强数据保护。

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

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

相关文章

PE节表中是否存在misc.VirtualSize 比SizeofRawData还要大的情况

确实是存在的,这是win10自带记事本,可以看到 确实是大.所以在申请imagebuffer的时候,还是需要比较大小.但是在还原的时候.只考虑sizeofRawData即可>

Python查漏补缺

1.冒泡排序 时间复杂度O(n^2) 选择、插入都是 def bubble(data, reverse):for i in range(len(data)-1):for j in range(len(data)-i-1):if data[j] > data[j1]:data[j], data[j1] data[j1], data[j]if reverse:data.reverse()return data 2.快速排序 时间…

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …

ros2安装完成后重要的一步

安装完成ros2之后&#xff0c;每次打开新的终端都需要 source /opt/ros/humble/setup.bash 为了解决这个为题&#xff0c;我们需要做如下操作,避免每次打开一个新的在终端都要设置。 在文件的最后一行添加 source /opt/ros/foxy/setup.bash

职称评审难在哪?

没有项目业绩资料&#xff1f; 社保不符合&#xff1f; 看不懂评审文件&#xff1f; 申报材料不会做&#xff1f; 论文没地发表&#xff1f; 有这些疑问的 评论区滴滴

如何使用ssm实现白云会议管理系统+vue

TOC ssm741白云会议管理系统vue 第1章 绪论 1.1 选题动因 到现在为止&#xff0c;互联网已经进入了千家万户&#xff0c;最普通的平民百姓也有属于自己的智能设备&#xff0c;计算机各种技术的储备也是相当的丰富&#xff0c;并且实现也是没有难度&#xff0c;各行各业&…

MFU简介

1、缩写 MFU - Mask Field Utilization&#xff08;光刻掩膜版有效利用比例&#xff09; GDPW - Gross Die Per Wafer&#xff0c;每张wafer上die的数量 2、什么是MASK 在光刻机中&#xff0c;光源&#xff08;紫外光、极紫外光&#xff09;透过mask曝光在晶圆上形成图…

python12_字符类型转换

字符类型转换 # 整型 A 3.14 B "123" C True D False E "3.14" F "True" G 0.0# 整型转换函数 def to_int(m):int_m int(m)return int_m# 布尔转换为整型 def bool_to_int(m):bool_m int(m)return bool_m# 布尔类型转换为字符串 def b…

SQL增删查改操作

目录 数据库概述 SQL基础操作 SQL通用语法 数据类型 SQL语句的分类 DDL(数据库定义,表定义,字段定义) 数据库操作 表操作 DDL小结 DML(数据的增删改,数据操作语言) DQL(查询) DQL小节 数据库概述 数据库,顾名思义就是用来存储和管理数据的,我们平时所使用的各大软…

如何通过开源工具帮助保护您的计算机安全

引言 如果您正在考虑安全问题&#xff0c;您有很多选择。随着当前网络犯罪的激增&#xff0c;以及发生犯罪时常见的重大后果&#xff0c;许多企业开始关注如何在网络世界中保护公民的安全。网络安全行业蕴藏着巨大的商业利益&#xff0c;但您可能会惊讶地发现&#xff0c;有一…

TCP CUBIC 曲线对 BIC 折线的拟合

bic 旨在对 reno 改进&#xff0c;用二分逼近替换线性遍历逼近&#xff0c;时间规模从 O ( W m a x ) O(W_{max}) O(Wmax​) 下降到 O ( ln ⁡ W m a x ) O(\ln {W_{max}}) O(lnWmax​)&#xff0c;这是本质&#xff0c;而 cubic 可以看作对 bic 的 bugfix&#xff0c;解除了…

Activity

69[toc] 1.启停活动页面 1.Activity启动和结束 从当前页面跳到新页面 startActivity(new Intent(this, ActFinishActivity.class));从当前页面返回上一个页面&#xff0c;相当于关闭当前页面 finish();2.Activity生命周期 官方描述生命周期 onCreate&#xff1a;创建活…

解决 Could not locate zlibwapi.dll. Please make sure it is in your library path

zlibwapi.dll文件是zlib库的Windows版本&#xff0c;很多Python上的库想要在Windows上执行都需要依赖这个文件。 可以通过本人上传的免费资源直接下载&#xff1a;zlibwapi 链接&#xff1a;https://pan.baidu.com/s/1u8osbt_IevO4GOkXthZ04A 提取码&#xff1a;c2mf zlibwa…

基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程

1 Jenkins是什么&#xff1f; 学习官网&#xff1a;Jenkins官网&#xff0c;Jenkins中文官网&#xff1b; Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件&#xff1b; 用Java语言编写的&#xff0c;可在Tomcat、Dock…

4.2.1 通过DTS传递物理中断号给Linux

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 4.2.1 通过DTS传递物理中断号给Linux 参考《GICv3_Software_Overview_Official_Release_B》&#xff0c;下表描述了GIC V3支持的INTID(硬件中断号)的范围。 SGI (Software Generated Interrupt)&#xff1a;软…

【C/C++】 秋招常考面试题最全总结(让你有一种相见恨晚的感觉)

目录 1.C程序编译链接过程 2.浅拷贝和move有区别吗 3.深拷贝和浅拷贝的区别 4.空类的大小 5.类的继承有几种方式&#xff0c;区别是什么&#xff1f; 六、extern 关键字的作用 七、static关键字的作用 八、指针和引用的区别 九、C内存分配方式 十、结构体对齐…

33 指针与数组:数组名与指针的关系、使用指针遍历数组、数组指针、指针数组、字符指针

目录​​​​​​​ 1 数组名与指针的关系 1.1 数组名 1.2 对数组名取地址 1.3 数组名与指针的区别 1.3.1 类型不同 1.3.2 sizeof 操作符的行为不同 1.3.3 & 操作符的行为不同 1.3.4 自增自减运算的行为不同 1.3.5 可变性不同 2 使用指针遍历数组 2.1 使用 *(nu…

硬布线控制器与微程序控制器

硬布线控制器和微程序控制器都是控制单元&#xff08;CU&#xff09;的实现方式&#xff0c;用于协调和控制计算机系统的操作。它们的主要区别在于控制信号的生成方式&#xff1a; 硬布线控制器 (Hardwired Controller): 概念: 硬布线控制器使用组合逻辑电路直接生成控制信号…

自己做个国庆75周年头像生成器

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 下载相关代码&#xff1a;【免费】《自己做个国庆75周年头像生成器》代码资源-CSDN文库 又是一年国庆节&#xff0c;今年使用国旗做…

《情书》你的名字,是最美的情书

《情书》你的名字&#xff0c;是最美的情书 岩井俊二&#xff0c;日本电影导演&#xff0c;作家及记录片导演。被誉为日本最有潜质的新近“映像作家”&#xff0c;也有中国影迷称他为“日本王家卫”。影像清新独特、感情细腻丰富。&#xff08;来自豆瓣&#xff09; 穆晓芳 译 …