redis持久化方案(redis持久化方案有哪些,优缺点)
大家好!今天让创意岭的小编来大家介绍下关于redis持久化方案的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等
只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端
创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008
本文目录:
一、redis的RDB和AOF两种持久化机制优缺点分析
redis持久化的意义主要是为了做 灾难恢复、数据恢复 其实可以把它归类到高可用的一个环节。
RDB持久化机制,对redis中的 数据 执行周期性的持久化。
AOF机制对 每条写入命令 作为日志,以append-only的模式写入一个日志文件,在redis重启对时候,可以通过回放AOF日志中写入的指令来重新构建整个的数据集。
如果同时使用AOF和RDB两种持久化机制 ,那么在redis重启的时候,会使用AOF来重新构建数据,因为AOF中的数据更加的完整。
优点:
(1)RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中redis的数据,这种多个数据文件的方式,非常适合做冷备。可以将文件存储到云端,本地磁盘等等。
(2)RDB机制对redis对外提供读写服务时候的影响非常小,可以让redis保持高性能,因为redis主进程只需要fork一个子进程,让子进程执行磁盘IO操作来进行RDB的持久化即可。
(3)相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复redis进程,更加的快速。
缺点:
(1)如果想让redis出现故障,尽可能的少丢失数据,那么RDB没有AOF好。因为一般来说,RDB数据快照文件,基本上都是每隔5分钟或者更长的时间,生成一次,这个时候,如果一旦发生宕机,那么就会把这段时间内的数据都丢失掉。
(2)RDB每次在fork子进程来执行RDB快照数据文件生成的时候,如果数据文件特别大,可能会导致对客户端提供的服务暂停数毫秒,或者甚至数秒。
优点:
(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行fsync操作,最多丢失1秒钟的数据。
(2)AOF日志文件以append-only模式写入,所以没有任何磁盘寻址的开销,写入性能非常高,而且文件不容易受损,即使文件尾部受损,也能很容易恢复,打开文件,把后面损坏的数据删除即可。
(3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。因为在rewrite log 的时候,会对其中的指令进行压缩,创建出一份需要恢复数据对最小日志出来,再创建新日志文件的时候,老日志文件还是会照常写入指令,当新的日志文件生成好之后,会将旧日志文件中后面写入的指令合并到新的日志文件中,这个新的merge后的日志文件,会在ready的时候,与旧的日志文件进行交换。之后就会把旧的日志文件删除掉。
(4)AOF文件中保存的是执行的指令,所以这个特性非常适合做灾难性的误操作紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么久可以立即拷贝这个AOF文件出来,将最后一条flushall命令删除,然后再将AOF文件放回去,就可以通过恢复机制,自动的恢复所有数据了。
缺点:
(1)对于同一份数据来说,AOF的日志文件通常要比RDB的数据快照文件要大。
(2)AOF开启之后,Redis服务支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然每秒一次fsync的性能也还是很高的。
(3)以前的AOF发生过bug,就是通过AOF记录的日志,进行数据恢复的时候,没有恢复一模一样的数据出来,所以说,类似AOF这种较为复杂的基于命令日志/merge/回放的方式,比基于RDB每次持久化一份完整数据快照文件的方式,更加脆弱一些,容易有bug。不过AOF为了避免rewrite过程导致的bug,因此每次rewrite并不是基于旧的指令日志进行merge,而是基于当时内存中的数据进行指令的重新构建,这样健壮性能更好一些。
综合使用两者,用AOF来保证数据尽可能的少丢失,作为第一选择,其次在AOP丢失或者损坏的情况下,用RDB来更加快速的恢复数据。
二、Redis持久化机制ADB和AOF
有save和bgsave两种方式
RDB优点:
RDB缺点:
数据安全性低。如果持久化的时候redis 发生故障, 会丢失最后一次持久化的数据, 所以这种方式更 适合数据要求不高 的时候.
fock子进程过程中redis也是不能执行操作的,所以进行R DB操作的时间间隔一定不能太短 .而且,如果当数据集较大时,也可能会导致整个服务器停止服务⼏百毫秒,甚至是秒级。
以日志的形式记录服务器所处理的每⼀个写、删除操作,查询操作不会记录,以文本的方式记录,不断追加,可以打开⽂件看到详细的操作记录 .
三种追加方式(fsync):
AOF优点:
AOF缺点 :
三、redis可以持久化吗
redis 数据持久化
1、快照(snapshots)
缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。

数据保存的目录:

工作原理
Redis forks.
子进程开始将数据写到临时RDB文件中。
当子进程完成写RDB文件,用新文件替换老文件。
这种方式可以使Redis使用copy-on-write技术。
2、APPEND ONLY MODE(AOF)
快照模式并不十分健壮,当系统停止,或者无意中Redis被kill掉,最后写入Redis的数据就会丢失。这对某些应用也许不是大问题,但对于要求高可靠性的应用来说,Redis就不是一个合适的选择。
Append-only文件模式是另一种选择。
你可以在配置文件中打开AOF模式:

选项:
1、appendfsync no
当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。
2、appendfsync everysec
当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一 次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。
所以,结论就是:在绝大多数情况下,Redis会每隔一秒进行一次fsync。在最坏的情况下,两秒钟
四、
以上就是关于redis持久化方案相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。
推荐阅读:
download下载安装(downloadhere体验服下载)