首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
说说Redis的持久化策略。
[问答题]
说说Redis的持久化策略。
添加笔记
求解答(0)
邀请回答
收藏(149)
分享
纠错
91个回答
添加回答
71
牛客793464225号
redis的持久化策略有三种:1.RDB持久化:将当前进程中的数据已生成快照的方式保存到硬盘中,是redis默认的持久化机制。优点:持久化时生成的文件体积小,恢复数据快,缺点:每次运行都需要执行fork操作,RDB持久化策略,没有做到实时的持久化,有时可能会丢失最后一步的数据。2.AOF持久化:以独立日志的方式记录每次写入的命令,重启时执行AOF中的命令即可恢复数据。优点:AOF持久化的安全性更高,保证了数据持久化的实时性。缺点:文件要大很多,恢复速度慢。3.RDB-AOF持久化:这种方式是基于AOF持久化方式构建出来的。兼具RDB和AOF的优势。
发表于 2022-05-12 20:59:15
回复(1)
45
十七_
1.RDB: redis database 在指定的时间间隔内,将内存中的数据集的快照写入磁盘,文件名dump.rdb 适合大规模的数据恢复,对数据库的完整性和一致性要求不是很高 一定时间间隔备份一次,如果数据库意外down掉,就会失去最后一次快照的所有修改 2.AOF: append only file 以日志的形式记录每个写操作,只允许追加文件,不允许改写文件,redis启动时会读取这个文件,并从头到尾执行一遍,以此来恢复数据,文件名appendonly.aof 在最恶劣的环境下,也丢失不会超过2秒的数据,完整性较高,但是会对磁盘持续的进行IO,代价太大。企业级最少需要5G才能支持 如果.aof文件大小超过原来的一倍,会进行重写压缩,保留最小的指令集合 3.优先级 aof>rdb
发表于 2022-04-24 10:29:21
回复(0)
7
阐禅
reids的持久化方式有两种:RDB和AOF RDB:它是通过数据集快照的方式来记录redis中的所有数据,在某个时间段内,将数据写入一个临时文件中,持久化结束,用这个临时文件替换上次的持久化文件,达到数据恢复。好处:只有一个dump.rdb文件,便于存储,容灾性较好,性能最大化,子进程来完成写操作,主进程继续处理命令。缺点:数据安全性低,RDB是隔一段时间进行一次备份,在此期间,如果发生了异常,可能导致数据的不完整性。 AOF:它是通过记录redis的所有命令,每执行一次就记录一次数据,保存在AOF文件中。优点:保证了数据的安全性和完整性,即便是中途宕机,也可以恢复过来。缺点:他的文件比RDB文件大,如果是数据集大的时候,他的恢复速度比RDB文件慢,启动速度也慢。 Redis默认是用RDB文件存储。
发表于 2022-05-06 15:34:26
回复(0)
5
Chaos1874
redis提供RDB和AOF两种类型持久化方式。 RDB:将某一个时刻的数据以快照的方式存入磁盘,redis会生成一个经过压缩的以.rdb为后缀的二进制文件作为快照。RDB提供手动持久化和自动持久化。用户自行调用SAVE或BGSAVE命令为手动持久化。用户通过配置条件,当达到条件后reids自动执行BGSAVE为自动持久化。优点:生成的紧凑的二进制快照文件使得数据恢复的速度很快。缺点:由于BGSAVE命令是通过fork一个子进程来处理持久化的,而这个进程运行非常耗费资源不易频繁执行,所以RDB无法做到数据的实时持久化。 AOF:redis通过以独立日志记录写入指令实现数据持久化。使用AOF需要设定同步选项来确定同步数据的时机(因为对log的写入不是马上同步到磁盘的而是先存在缓冲区):1,always:每次写命令都同步,严重影响服务器性能。2,everysec:每秒同步一次,不会对性能有很大影响。3,no:让系统决定什么时候同步指令。优点:不易丢失数据。缺点:通过执行命令来实现数据恢复非常耗时。
发表于 2022-06-21 17:08:26
回复(0)
4
牛客139432088号
RDB:redis database 指定时间间隔内将内存中的数据集快照写入磁盘 AOF:只追加文件,只追加 不修改,以日志的形式写入每个写操作,这样在redis崩溃重启时,会读取.aof文件并重新执行一遍,以此来恢复数据, 优先级AOF>RDB
发表于 2022-05-12 11:40:58
回复(0)
2
自信的大白菜
1.reids的持久化方式有两种:RDB和AOF
2.RDB: redis database 持久化是将当前进程数据以生成快照的方式保存到硬盘的过程,也是Redis默认的持久化机制
3.缺点:对数据库的完整性和一致性要求不是很高 一定时间间隔备份一次,如果数据库意外down掉,就会失去最后一次快照的所有修改
4.优点:优点是其生成的紧凑压缩的二进制文件体积小,使用该文件恢复数据的速度非常快;
5.AOF: append only file 以日志的形式记录每个写操作,只允许追加文件,不允许改写文件,redis启动时会读取这个文件,并从头到尾执行一遍,以此来恢复数据
6.优点是与RDB持久化可能丢失大量的数据相比,AOF持久化的安全性要高很多。在最恶劣的环境下,也丢失不会超过2秒的数据
7.缺点:AOF存储文件体积要比二进制格式的”.rdb”文件大很多。数据恢复速度比RDB慢很多。AOF在进行重写时也需要创建子进程,在数据库体积较大时将占用大量资源,会导致服务器的短暂阻塞。
发表于 2023-01-16 01:03:13
回复(0)
2
牛客117654258号
RDB:是用快照的形式将数据保存到磁盘上。快照的意思就是将一时间点的数据集拍照并保存下来。这种方式可以指定的时间间隔或者执行特定命令时将当前系统中的数据进行保存备份,以二进制的形式写入到dump.rdb文件中.AOF则是将Redis执行的每次写命令记录到日志文件中,当重启Redis会加载appendonly.aof文件来恢复数据。默认模式是RDB
编辑于 2022-08-04 16:56:28
回复(0)
1
在努力的海螺很豁达
发表于 2024-12-11 18:43:46
回复(0)
1
大星星不见了
1、为什么要持久化:数据丢失后从后端数据恢复慢。😀2、redis持久化的方式:RDB、AOF、RDb-AOF混合😀3、RDB是以快照的方式存储到硬盘,有手动触发和自动触发,手动触发是save和bgsave命令,自动触发是通过配置调用bgsave。优点是速度快,占用内存小。缺点是不能实时,并且调用bgsave消耗大。4、AOF是日志存储,先写内存,后写日志。优点:实现了实时,缺点速度慢,消耗大。5、RDB-AOF混合:结合了共同的优点,先进行快照存储,在后再快照之间的时间段采用AOF,实现了实时。较为常用
发表于 2023-03-24 11:03:26
回复(0)
1
岑溪123
1、RDB(redis默认)方式的持久化是通过快照完成的,Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。根据数据量大小与结构和服务器性能不同,这个时间也不同。当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。Redis默认会将快照文件存储在当前目录的dump.rdb文件中.Redis实现快照的过程 - Redis使用fork函数复制一份当前进程(父进程)的副本(子进程); - 父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件; - 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。 - 在执行fork的时候操作系统(类Unix操作系统)会使用写时复制(copy-on-write)策略,即fork函数发生的一刻父子进程共享同一内存数据,当父进程要更改其中某片数据时(如执行一个写命令 ),操作系统会将该片数据复制一份以保证子进程的数据不受影响,所以新的RDB文件存储的是执行fork一刻的内存数据。即Redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的。除了自动快照,还可以手动发送SAVE或BGSAVE命令让Redis执行快照,两个命令的区别在于,前者是由主进程进行快照操作,会阻塞住其他请求,后者会通过fork子进程进行快照操作。一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。2、默认情况下Redis没有开启AOF(append only file)方式的持久化,可以在redis.conf中通过appendonly参数开启,在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些,开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。此时重新启动Redis后Redis会使用AOF文件来恢复数据,使得丢失的数据更少。
编辑于 2023-04-08 15:01:34
回复(0)
1
孬牛
RDB:Redis 可以通过创建快照来获得存储在内存⾥⾯的数据在某个时间点上的副本。快照持久化是 Redis 默认采⽤的持久化⽅式. AOF:与快照持久化相⽐,AOF 持久化的实时性更好,因此已成为主流的持久化⽅案。 默认情况下 Redis没有开启 AOF(append only file)⽅式的持久化. 在 Redis 的配置⽂件中存在三种不同的 AOF 持久化⽅式,它们分别是: appendfsync always #每次有数据修改发⽣时都会写⼊AOF⽂件,这样会严重降低Redis的速度 appendfsync everysec #每秒钟同步⼀次,显式地将多个写命令同步到硬盘 appendfsync no #让操作系统决定何时进⾏同步
编辑于 2022-11-10 15:20:32
回复(0)
1
牛客177867293号
RDB(快照方式保存数据,优点:恢复速度快,缺点:在宕机时可能损失最后一次的数据,比较适合大规模的数据恢复),AOF(快照,对每一步的操作都记录,恢复速度慢,但损失数据少,对磁盘进行持续的IO操作,代价太大)
发表于 2022-10-19 14:52:20
回复(0)
1
总之就是心好累
RDB和AOF RDB是主线程fork出一个子线程异步来进行数据的存储,因为是异步执行所以不会对主进程造成性能影响、并且所写的文件都是压缩后的二进制文件,占空间较小。并且因为是直接对数据的存储而非AOF那样对命令的记录,所以恢复数据也更快。具体的流程就是主进程和子进程共享一个页表来对物理内存进行读写操作,当读写完成后将磁盘中旧的RDB文件替换成新的RDB文件。缺点有两个:一个就是在子进程读内存时主进程的写操作不能直接操作内存,而是将要操作的数据拷贝出来,操作拷贝的数据,这样就会导致占用额外的内存,极端情况下是原来的两倍;第二个是虽然持久化操作是由子进程做的,但fork出子进程的这段时间也会消耗大量资源、压缩、写入RDB文件也需要耗费不少时间。 AOF不是直接持久化数据,而是将命令记录下来。因此所存储的文件比AOF会更大(因为一个key只会有一个数据,但一个key可能会有多次操作)。当文件过大时就需要重写。重写是将记录所有操作变成只记录对单个key的最后一次写操作。AOF的恢复速度较慢(原因上面说了),但是数据完整性更好,因为AOF时间间隔一般很短。 综上所述:相比于数据完整性更看重恢复速度可以选择RDB,反之选择AOF。
发表于 2022-10-12 10:11:08
回复(0)
1
万里迢迢
arralist采用数组的方式保存,linkedlist采用单链表方式保存,arraylist 的默认大小是10,每次扩增都是按照新数组大小=原大小+原大小*0.5增长。在进行大量的查询操作优先使用arraylist,如果有大量的增加和删除操作用linkedlist
编辑于 2022-05-04 21:44:13
回复(3)
0
acodebird
redis的持久化策略有RDB、AOF两种,默认是RDB
1.RBD:定时快照,一段时间将内存中的数据生成rdb文件保存到磁盘
1.1.优点:生成的数据文件较小,数据恢复比较快
1.2.缺点:两次快照之间的数据可能会丢失,fork可能会阻塞主线程(即使使用BGSAVE异步执行快照保存,但是fork时需要复制主线程的内存页表等信息,内存页表越大复制时间越多,可能长时间阻塞主线程)
1.3.触发方式:
1.3.1.自动执行:比如配置文件设置save 60 10000,设置60秒内执行10000次写操作就自动执行保存 1.3.2.手动执行:调用SAVE或者BGSAVE命令
2.AOF:日志追加,记录每一个写操作命令到AOF文件
2.1.优点:数据安全性更高、AOF文件内容可读性强(字符串)
2.2.缺点:AOF文件大,数据恢复比较慢
2.3.触发方式:
2.3.1.由redis决定何时进行数据写入(性能最快、数据丢失风险高)
2.3.2.appendfsync always:每个写命令都执行(性能最慢、数据安全性高)
2.3.3.appendfsync everysec(默认):每秒执行一次(性能和数据安全性相对平衡)
3.AOF和RDB混用(redis4.0开始提供):综合AOF和RDB的优点,每次执行持久化的时候先生成一个特殊的AOF文件,前部分存放RDB快照,后部分存放RDB生成过程中的命令
发表于 2025-08-05 14:10:40
回复(0)
0
sir_gaga
AOF和RDB。RDB是利用快照技术将redis中现有的键值对保存到硬盘中,默认采取RDB机制。AOF是以独立日志记录每次的写入命令,重启时执行AOF相关命令可以恢复数据,但是恢复速度慢。AOF+RDB策略,采用快照加写入日志相结合的形式,兼顾的两这个的优点。
发表于 2025-07-06 23:11:53
回复(0)
0
newoj
RDB快照持久化 通过save/bgsave(yibuchuagnjianRDB快照持久化 通过save/bgsave(异步生成fork子进程) 会记录某一时间的内存数据完整写入硬盘 生成二进制文件.rdb 也可以自动触发 在redis.conf配置文件设置 优点 体积小 恢复快 性能影响低 异步触发不会阻塞主线程 缺点 两次快照之间的写操作可能丢失 fork的子进程会占用内存 大内存场景可能引发卡顿 AOF日志追加 持久化 appendfsync配置 支持always every no三种状态 混合使用 在 AOF 重写时,将 RDB 快照数据写入 AOF 文件开头,后续追加增量命令 always:每条命令都同步到磁盘,数据零丢失,但 IO 开销大,性能最低。 everysec(默认):每秒同步一次磁盘,最多丢失 1 秒数据,性能与安全性平衡。 no:由操作系统决定同步时机,性能最高,但数据丢失风险最大 优点: 数据安全性高:可配置always级别,几乎不丢数据。 可读性强:AOF 文件是文本格式,可直接查看或修改) 缺点: 文件体积大:记录所有命令,比 RDB 文件大(重写后可优化) 恢复速度慢:需要逐条执行命令恢复数据,比 RDB 慢。 性能影响:always模式下 IO 频繁,可能降低 Redis 写入性能
发表于 2025-06-24 14:35:29
回复(0)
0
叠叠不休的加菲猫
Redis提供两种持久化策略:RDB和AOF。RDB通过定时生成数据快照实现,适合快速恢复但可能丢失部分数据;AOF记录所有写操作命令,数据完整性更高但文件较大。此外,Redis支持混合持久化模式(AOF+RDB),结合两者优势实现高效备份与恢复。
发表于 2025-06-06 16:57:35
回复(0)
0
想潜水的他刷牛客
redis的持久化策略有AOF,RDB两种 RDB是指将数据存储为一个二进制快照文件,在恢复数据时只需要将快照文件中的数据重新写入,但是当数据量较大时,在恢复数据时会出现数据丢失的情况。这种方式由于是通过二进制文件保存,文件较小,执行速度快。 AOF是指将所有的写指令进行保存,在数据恢复时依次执行指令进行恢复,AOF这样的方式会导致文件较大,恢复时时间会比较长。 RDB+AOF在备份数据时先通过RDB文件将数据保存为快照文件,这时如果有写操作,将其保存为AOF文件,在RDB保存完成之后通过增量命令的方式加在RDB之后。恢复时先读取RDB文件数据,后执行AOF的指令。
发表于 2025-06-02 10:48:20
回复(0)
0
真的会谢的牛油果很想六点下
RDB、AOF
发表于 2025-05-23 19:36:40
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Redis
上传者:
real1993
难度:
91条回答
149收藏
2760浏览
热门推荐
相关试题
下面关于Redis 6.0版本中的...
Redis
评论
(2)
下面关于Redis的定义和特点,正...
Redis
评论
(3)
下面关于Redis中的操作命令,错...
Redis
评论
(4)
在传统的Diffusion Mod...
深度学习
评论
(1)
填入画线处最恰当的一句是
大模型概念
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题