您的当前位置:首页 >探索 >Redis 持久化有哪几种方式,怎么选? 正文

Redis 持久化有哪几种方式,怎么选?

时间:2025-11-05 13:40:37 来源:网络整理编辑:探索

核心提示

前言大家好,我是程序员田螺。今天给大家分享一道经典面试题:Redis 持久化有哪几种方式,怎么选?AOF持久化RDB持久化AOF和RDB如何选择1 AOF 持久化Redis是基于内存的,如果Redis

前言

大家好,怎么选我是久化程序员田螺。今天给大家分享一道经典面试题:Redis 持久化有哪几种方式,有种怎么选?怎么选

AOF持久化RDB持久化AOF和RDB如何选择

1 AOF 持久化

Redis是基于内存的,如果Redis服务器挂了,久化数据就会丢失。有种为了避免数据丢失了,怎么选Redis提供了两种持久化方式,久化RDB和AOF。有种我们先来介绍AOF。怎么选

AOF(append only file) 持久化,久化采用日志的有种形式来记录每个写操作,追加到AOF文件的怎么选末尾。Redis默认情况是久化不开启AOF的。重启时再重新执行AOF文件中的有种命令来恢复数据。它主要解决数据持久化的实时性问题。

AOF是执行完命令后才记录日志的。为什么不先记录日志再执行命令呢?这是因为Redis在向AOF记录日志时,不会先对这些命令进行语法检查,如果先记录日志再执行命令,日志中可能记录了错误的命令,免费信息发布网Redis使用日志回复数据时,可能会出错。

正是因为执行完命令后才记录日志,所以不会阻塞当前的写操作。但是会存在两个风险:

更执行完命令还没记录日志时,宕机了会导致数据丢失AOF不会阻塞当前命令,但是可能会阻塞下一个操作。

这两个风险最好的解决方案是折中妙用AOF机制的三种写回策略 appendfsync:

always,同步写回,每个子命令执行完,都立即将日志写回磁盘。everysec,每个命令执行完,只是先把日志写到AOF内存缓冲区,每隔一秒同步到磁盘。no:只是先把日志写到AOF内存缓冲区,有操作系统去决定何时写入磁盘。

always同步写回,可以基本保证数据不丢失,no策略则性能高但是数据可能会丢失,一般可以考虑折中选择everysec。

如果接受的命令越来越多,b2b供应网AOF文件也会越来越大,文件过大还是会带来性能问题。日志文件过大怎么办呢?AOF重写机制!就是随着时间推移,AOF文件会有一些冗余的命令如:无效命令、过期数据的命令等等,AOF重写机制就是把它们合并为一个命令(类似批处理命令),从而达到精简压缩空间的目的。

AOF重写会阻塞嘛?AOF日志是由主线程会写的,而重写则不一样,重写过程是由后台子进程bgrewriteaof完成。

AOF的优点:数据的一致性和完整性更高,秒级数据丢失。缺点:相同的数据集,AOF文件体积大于RDB文件。数据恢复也比较慢。

2 RDB持久化

因为AOF持久化方式,如果操作日志非常多的话,Redis恢复就很慢。云服务器有没有在宕机快速恢复的方法呢,有的,RDB!

RDB,就是把内存数据以快照的形式保存到磁盘上。和AOF相比,它记录的是某一时刻的数据,,并不是操作。

什么是快照?可以这样理解,给当前时刻的数据,拍一张照片,然后保存下来。

RDB持久化,是指在指定的时间间隔内,执行指定次数的写操作,将内存中的数据集快照写入磁盘中,它是Redis默认的持久化方式。执行完操作后,在指定目录下会生成一个dump.rdb文件,Redis 重启的时候,通过加载dump.rdb文件来恢复数据。RDB触发机制主要有以下几种:

图片

RDB通过bgsave命令的执行全量快照,可以避免阻塞主线程。basave命令会fork一个子进程,然后该子进程会负责创建RDB文件,而服务器进程会继续处理命令请求

快照时,数据能修改嘛?  Redis接住操作系统的写时复制技术(copy-on-write,COW),在执行快照的同时,正常处理写操作。

虽然bgsave执行不会阻塞主线程,但是频繁执行全量快照也会带来性能开销。比如bgsave子进程需要通过fork操作从主线程创建出来,创建后不会阻塞主线程,但是创建过程是会阻塞主线程的。可以做增量快照。

RDB的优点:与AOF相比,恢复大数据集的时候会更快,它适合大规模的数据恢复场景,如备份,全量复制等缺点:没办法做到实时持久化/秒级持久化。

Redis4.0开始支持RDB和AOF的混合持久化,就是内存快照以一定频率执行,两次快照之间,再使用AOF记录这期间的所有命令操作。

3 如何选择RDB和AOF

如果数据不能丢失,RDB和AOF混用如果只作为缓存使用,可以承受几分钟的数据丢失的话,可以只使用RDB。如果只使用AOF,优先使用everysec的写回策略。
上一篇:早在Ubuntu问世之前,Debian已经是Linux领域的一股主力军了。更确切地来说,正是Debian这款Linux发行版,让从Knoppix到Simply Mepis的其他众多发行版得以成为现实。这就好比是Ubuntu之于Linux Mint的关系:Ubuntu为Mint提供了便于开发的基础。在本文中,本人将详细介绍Debian与Ubuntu相比孰优孰劣,以及Dibian是不是有能力成为实力强劲的Ubuntu替代者。发行版安装尽管Ubuntu立足于Debian基础上,但它不会带来一模一样的安装体验。比如说,Debian让你可以试用KDE、GNOME及其他的桌面环境,而Ubuntu本身实际上就提供了Unity桌面环境。诚然,现在市面上有些Ubuntu派生版提供替代桌面,但Debian是以Debian的名义正式提供替代桌面的。这是Ubuntu所欠缺的地方。值得一提的另一个方面是Debian的安装方式。你有两个选择:要么使用标准的安装ISO文件,要么使用随安装程序捆绑在一起的Live ISO文件。我使用了Live ISO文件,目的是为了看看该版本上的安装程序是怎么处理安装的。让我吃惊的是,按图形化用户界面(GUI)安装程序逐步操作不仅非常简单,Debian甚至还建议我考虑建立一个专门的主分区。考虑到Ubuntu仍是不给予这种建议的少数发行版之一,Debian的这项特性非常好。Ubuntu也提供了一个优秀的GUI安装程序;不过,我发现缺少建议建立一个专门的主分区让人沮丧,因为从长远来看这只会有利于用户。我确信,Ubuntu开发人员迫使用户手动选择该选项肯定有某个神秘的理由,但缺少这个简单的单选按钮让我非常恼火。要考虑的另一个方面是,Debian的安装过程会提出新手用户可能不会明白的一些问题。比如说,关于程序包镜像和GRUP安装在哪里的问题最好还是留给中高级用户去处理。这倒不是说,新手用户搞不明白此类问题,而是说大多数人不愿意为了搞清楚这些东西到底啥意思而硬着头脑研究一番。Ubuntu不同于Debian的另一个方面是,安装过程中出现的视觉效果。Debian的GUI安装程序缺少Ubuntu的安装过程中出现的各种滚动图形。这倒不是说,一方在这个方面胜于另一方;而是说,这大概表明了Debian给人的印象:这是一款朴实无华的发行版。桌面体验一旦安装完毕,Ubuntu和Debian都提供了一个标准的桌面环境,该桌面环境提供了应用程序菜单、桌面和各种小应用程序。就Debian而言,我选择使用Gnome,那样我最后得到的桌面是自己选择的。就Ubuntu而言,你最后得到的桌面会是Unity。Ubuntu随带火狐浏览器,而Debian则提供了没有品牌的Iceweasel浏览器。它与火狐实为同一款浏览器,只是没有所有权归属Mozilla基金会的商标品牌。我选择的Gnome桌面随带一种标准的Gnome体验。由于我在虚拟机中运行该桌面,最后得到了一种快速的后备模式,因为在我的测试机上性能是限定的。坦率地说,在拥有较少资源的机器上运行时,带Gnome的Debian在性能方面可以说完胜Ubuntu。不过从外观上来看,Ubuntu在美感方面扳回一局。这两款发行版在默认安装后都使用PulseAudio作为其声音服务器,这让人大跌眼镜,因为大多数Debian用户不太可能想要使用PulseAudio,因为它被许多Linux用户认为是一项臃肿的技术。软件管理Debian与Ubuntu有着共同之处的一个地方是,使用Debian软件包管理及其随带的配套工具。在终端层面,apt用于软件包管理。GUI软件包管理方面就开始不一样了:Ubuntu在默认情况下使用Ubuntu软件中心(Ubuntu Software Center,https://apps.ubuntu.com/cat/),而Debian使用Synaptic。对经验丰富的Linux爱好者来说,后者实际上更受青睐,因为Synaptic是一款比软件中心更出色的软件工具。 不过,新手用户可能发觉自己很想念Ubuntu软件中心,因为Synaptic缺少了Ubuntu的默认选项所具有的那种完美。另一方面是Ubuntu的个人软件包档案(PPA,https://launchpad.net/ubuntu/+ppas)和Debian的backports(http://backports.debian.org/)。Ubuntu的PPA其想法在于,你可以确保自己选择的最新的每一款软件都是版本最新。至于Debian,用户可以使用Debian backports获得同样的体验。这些软件基本上是Debian进行测试的、为了供Debian稳定版用户使用而开发的。至于Ubuntu和Debian,用户都要小心,因为先进软件有时可能会带来新问题。我给出的建议是,这两种方法最好都避免,除非是有修正版,或者假如你使用任何某一款软件的先进版可以获得某项功能。虽然旧版软件似乎有点乏味,但是它们往往更加稳定。其他杂项Ubuntu不同于Debian的另一个方面是,Ubuntu中的大多数网络设备在默认情况下就能工作。而万一需要某个专有的驱动程序,限制性驱动程序管理工具就会轻松处理这个问题。相比之下,Debian无法在默认情况下运行许多无线设备。诚然,Debian组件库里面有所需的二进制大对象文件(blob);不过,安装这些文件,并且让许多常用的无线芯片组能够与Debian协同运行还是需要有劳最终用户。一些人可能认为,Debian用起来更困难。我不赞同这一说法,而是会认为,Debian就是没有提供安全带的Linux。想在Debian环境下获得类似Ubuntu的体验,只需要在Debian维基(http://wiki.debian.org/)方面花点时间,另外添加一两个组件库。而最后,你得到的是一个运行稳定的、反应迅即的桌面,它在速度和稳定性方面会让任何安装的Ubuntu相形见绌。享受这个好处的秘密是,Debian只需要你花一点工夫。证明Debian更胜一筹的最后一个例子是,安装专有的视频驱动程序。在经验丰富的用户看来,Debian方法相当简单直接。只要浏览至相应页面,添加所需的组件包,然后粘贴你所需驱动程序的安装命令即可。 不过,Ubuntu用户已被专有的驱动程序管理器过分宠坏了。真正的好消息是,实际上,Debian方法比Ubuntu方法快捷得多。Debian用户只需要从Debian维基拷贝和粘贴两个命令框的内容。另一方面,Ubuntu用户则依赖GUI;众所周知,GUI远远谈不上十全十美。更糟糕的是,要是万一出了什么岔子,假如不深入钻研日志本身,就没有详细对策可供你采取。这里的要点在于,Debian需要更实际上手的用户体验。有些人喜欢这样,而有些人一想到让桌面端Linux成为更深入的体验就犹豫不决。所以说,Debian是实力强劲的Ubuntu替代者吗?答案是肯定的,假如你愿意调整自己的期望的话。有些用户愿意学习Linux如何工作,让他们多花点时间添加所需组件库以获得额外的硬件支持,那毫无问题;对这些人来说,Debian是个非常好的选择。Debian用起来比Arch Linux来得容易,但仍为用户们提供了一种运行速度快又稳定的桌面,你在今后好多年都可以放心地用它。