首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
说说Redis的持久化策略。
[问答题]
说说Redis的持久化策略。
添加笔记
求解答(0)
邀请回答
收藏(209)
分享
纠错
108个回答
添加回答
87
牛客793464225号
redis的持久化策略有三种:1.RDB持久化:将当前进程中的数据已生成快照的方式保存到硬盘中,是redis默认的持久化机制。优点:持久化时生成的文件体积小,恢复数据快,缺点:每次运行都需要执行fork操作,RDB持久化策略,没有做到实时的持久化,有时可能会丢失最后一步的数据。2.AOF持久化:以独立日志的方式记录每次写入的命令,重启时执行AOF中的命令即可恢复数据。优点:AOF持久化的安全性更高,保证了数据持久化的实时性。缺点:文件要大很多,恢复速度慢。3.RDB-AOF持久化:这种方式是基于AOF持久化方式构建出来的。兼具RDB和AOF的优势。
发表于 2022-05-12 20:59:15
回复(3)
46
十七_
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
说又不是不能用的伊泽瑞尔很优秀
RDB:在指定时间内生成redis内存空间二进制快照,保存到磁盘中。
AOF,追加写的方式,把redis写命令保存到文件当中,写回磁盘的有三种方式,每隔1s,立即写回,由操作系统决定,AOF+RDB:当发生AOF重写的时候,先以RDB的形式保存当前内容的快照,后续的内容以RDB的形式进行追加
发表于 2026-03-10 09:32:13
回复(0)
0
a002
aof和rdb,还有混合持久化,aof是追加命令,rdb是类似于快照,混合持久化就是定时在aof文件前使用rdb格式存储当前快照,两次快照中间使用aof追加命令,默认是rdb,优点是备份文件体积小,恢复快,但是可能会丢失两次快照间的数据,aof备份体积大,恢复速度慢,需要重放命令,因此会有定期重建aof机制,但是安全性更高
发表于 2026-03-05 20:31:11
回复(0)
0
牛客598076241号
redis的持久化策略:1、RDB持久化,RDB持久化主要将内存中的数据以生成快照的形式保存在硬盘中,是redis的默认持久化操作,主要有sava和bgsave两种操作命令,常用的为bgsave(不会阻塞主进程)。优点:文件体积小,恢复数据快,缺点:fork操作耗时,且可能会导致数据丢失。2、AOF持久化:以日志的形式去记录写命令。优点:数据安全性更高,缺点:文件过大,恢复速度慢。3、PDB-AOF持久化:这种方式是基于AOF持久化方式构建出来,主要是当AOF重写时,先将内存中的数据以RDB形式写入Aof文件中,后续增量数据以aof的形式继续写入。兼具RDB和AOF的优势
发表于 2026-02-28 10:38:34
回复(0)
0
lhdrc
有三种策略
1.AOF(append only file):简单来说就是记录了每一条写入redis命令。文件采用循环式记录,新的数据可能会覆盖旧的数据。aof的优点是丢失的数据少,适合用于重启恢复,主从同步(由于记录的是命令,所以在其他机器上也可以运行)等。除此之外还有重写机制,压缩了不必要的命令,缓解了文件体积过大的缺点。
2.RDB快照 :简单来说就是给当前的redis拍了一个快照,数据以快照的方式存入硬盘中。优点是恢复速度快,文件体积较小,文件采用追加式写入,不会造成早期版本数据的丢失,适用于旧版本的恢复。RDB规定了三种快照刷盘时机机制。每次写入更新,每秒更新,有操作系统决定何时更新。由于RDB快照记录有间隔所以数据丢失会比AOF严重,而且在不同的机器上快照无法兼容运行,不适用于同步的场景。
3.AOF结合RDB。兼容了两者的优点,覆盖的场景更加全面,推荐这种持久化策略。
编辑于 2026-02-21 18:34:29
回复(0)
0
等oc的小师弟很奔放
RDB和AOF。AOF是记录操作日志,每一次redis操作后都会记录下来,完整性高但是文件大。RDB是数据快照,每隔一个间隔记录一次,缺点相较于aof一致性会弱一点,但内存消耗会少一点
发表于 2026-02-14 18:24:41
回复(0)
0
小明揾工
1.RDB:将当前线程中的数据已生成快照的方式保存到硬盘中。 2.AOF:以独立日志的方式记录每次写入的命令,重启时执行AOF中的命令即可恢复数据。
发表于 2026-02-10 15:00:08
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Redis
上传者:
real1993
难度:
108条回答
209收藏
3964浏览
热门推荐
相关试题
下面关于Redis中的操作命令,错...
Redis
评论
(5)
下面关于Redis的定义和特点,正...
Redis
评论
(3)
下面关于Redis 6.0版本中的...
Redis
评论
(2)
以下关于性能测试、压力测试、负载测...
软件测试
评论
(1)
小红的数列
数组
动态规划
蚂蚁
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题