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。
如果接受的命令越来越多,IT技术网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的写回策略。相关文章
- 摘要:在现代社会,手游已经成为人们生活中不可或缺的一部分,然而有些人希望能够同时运行多个游戏账号或进行多项操作,这就需要双开手游。本文将详细介绍如何在平板电脑上实现双开手游,并提供实用技...2025-11-04
本文转载自微信公众号「SH的全栈笔记」,作者SH的全栈笔记。转载本文请联系SH的全栈笔记公众号。Java NIO 中的 Channel 分类:FileChannel SocketChan2025-11-04
本文转载自微信公众号「网管叨bi叨」,作者网管。转载本文请联系网管叨bi叨公众号。在编程领域里,枚举是用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机。拿一个实体对象的状态机2025-11-04
redis中Could not get a resource from the pool异常及解决方案
描述这个错误产生的前提是这样的,将数据存入redis新安装的)中,在通过连接池获取jedis实例时,产生如下错误 Could not get a resource from the pool)。分析由2025-11-04用粘土手工打造独特电脑装饰(发挥创意,打造个性化电脑装饰品)
摘要:在现代社会中,电脑成为了我们日常生活的必需品,而如何将电脑个性化地装扮起来成为了一种时尚趋势。粘土手工作为一种独特的手艺,可以帮助我们打造出各种独特的电脑装饰品,使电脑焕发出个人的...2025-11-04- 在互联网经济中,域名不仅是企业或个人在线身份的标识,更是一种价值不菲的资产。随着电子商务的蓬勃发展,一个好的域名往往意味着更高的流量和商业价值。因此,域名中介应运而生,成为连接域名买卖双方的桥梁。本文2025-11-04

最新评论