redis的两种持久化方式
1.为什么redis需要持久化
答:edis是基于内存的,如果Redis服务器挂了,数据就会丢失
2.有几种方式实现redis的持久化
答:有两种,一种是AOF 持久化,另一种是RDB持久化
一. AOF持久化
形式:采用日志的形式来记录每个写操作,追加到AOF文件的末尾
过程:执行完命令后才记录日志的
备注:Redis默认情况是不开启AOF的
问:为什么不先记录日志再执行命令呢?
答:因为Redis在向AOF记录日志时,不会先对这些命令进行语法检查,如果先记录日志再执行命令,日志中可能记录了错误的命令,Redis使用日志恢复数据时,可能会出错
问:会阻塞当前的写操作吗?
答:因为执行完命令后才记录日志,所以不会影响,但会存在两个风险:
更执行完命令还没记录日志时,宕机了会导致数据丢失
AOF不会阻塞当前命令,但是可能会阻塞下一个操作。
问:如何解决上述的两个风险
答:有三种写回策略
always,同步写回,每个子命令执行完,都立即将日志写回磁盘。
everysec,每个命令执行完,只是先把日志写到AOF内存缓冲区,每隔一秒同步到磁盘。
no:只是先把日志写到AOF内存缓冲区,有操作系统去决定何时写入磁盘。
问:如何选取上述三种写回策略?
答:always同步写回,可以基本保证数据不丢失,no策略则性能高但是数据可能会丢失,一般可以考虑折中选择everysec
问:如果接受的命令越来越多,AOF文件也会越来越大,文件过大还是会带来性能问题。日志文件过大怎么办呢?
答:会有一种AOF重写机制,随着时间推移,AOF文件会有一些冗余的命令如:无效命令、过期数据的命令等等,AOF重写机制就是把它们合并为一个命令(类似批处理命令),从而达到精简压缩空间的目的
问:AOF重写会阻塞吗
答:AOF日志是由主线程会写的,而重写则不一样,重写过程是由后台子进程bgrewriteaof完成
问:AOF的优缺点
答:优点:数据的一致性和完整性更高,秒级数据丢失。
缺点:相同的数据集,AOF文件体积大于RDB文件。数据恢复也比较慢。
二.RDB持久化
RDB,就是把内存数据以快照的形式保存到磁盘上。和AOF相比,它记录的是某一时刻的数据。它是Redis默认的持久化方式,RDB持久化,是指在指定的时间间隔内,执行指定次数的写操作,将内存中的数据集快照写入磁盘中,执行完操作后,在指定目录下会生成一个dump.rdb文件,Redis 重启的时候,通过加载dump.rdb文件来恢复数据
问:RDB触发机制有几种?
答:分为手动触发和自动触发,手动触发分为两种,第一种是同步的,输入save命令,会阻塞当前redis服务器,第二种是bgsave命令,是异步的,会fork一个子进程,然后该子进程会负责创建RDB文件,而服务器进程会继续处理命令请求,另一种是手动触发,如下图所示:

备注:虽然bgsave执行不会阻塞主线程,但是频繁执行全量快照也会带来性能开销。比如bgsave子进程需要通过fork操作从主线程创建出来,创建后不会阻塞主线程,但是创建过程是会阻塞主线程的。可以做增量快照处理
问:RDB的优缺点
答:优点:与AOF相比,恢复大数据集的时候会更快,它适合大规模的数据恢复场景,如备份,全量复制等
缺点:没办法做到实时持久化/秒级持久化
注意:Redis4.0开始支持RDB和AOF的混合持久化,就是内存快照以一定频率执行,两次快照之间,再使用AOF记录这期间的所有命令操作
3、如何选择RDB和AOF
答:1.如果数据不能丢失,RDB和AOF混用
2.如果只作为缓存使用,可以承受几分钟的数据丢失的话,可以只使用RDB。
3.如果只使用AOF,优先使用everysec的写回策略。
redis的两种持久化方式的更多相关文章
- Redis的两种持久化方式-快照持久化和AOF持久化
Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为"持久化"效 ...
- Redis的两种持久化方式-快照持久化(RDB)和AOF持久化
Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为“持久化”效果. redis有两 ...
- Redis的两种持久化方式详细介绍
一,Redis是一款基于内存的数据库,可以持久化,在企业中常用于缓存,相信大家都比较熟悉Redis了,下面主要分享下关于Redis持久化的两种模式 1.半持久化模式(RDB,filesnapshott ...
- [转载] redis 的两种持久化方式及原理
转载自http://www.m690.com/archives/371 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串 ...
- 探究Redis两种持久化方式下的数据恢复
对长期奋战在一线的后端开发人员来说,都知道redis有两种持久化方式RDB和AOF,虽说大家都知道这两种方式大概运作方式,但想必有实操的人不会太多. 这里是自己实操两种持久化方式的一点点记录. 先看以 ...
- Redis两种持久化方式(RDB&AOF)
爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...
- Redis系列之----Redis的两种持久化机制(RDB和AOF)
Redis的两种持久化机制(RDB和AOF) 什么是持久化 Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望 ...
- redis++:Redis的两种持久化 RDB 和 AOF
Redis持久化备份数据的方式有两种:RDB(Redis DataBase) . AOF(Append Only File). RDB 什么是RDB: 在指定时间间隔内,将内存中的数据集快照写入磁盘 ...
- Redis的两种持久化机制
Redis的两种持久化机制 1.持久化机制 client--->redis(内存)--->内存数据-数据持久化--->磁盘 两种方法 快照(Snapshot) AOF(Append ...
- redis两种持久化方式的优缺点
redis两种持久化的方式 RDB持久化可以在指定的时间间隔内生成数据集的时间点快照 AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,AOF文件中全部以 ...
随机推荐
- E4X已经被废弃,各浏览器基本上不再支持它;
E4X是一种在ECMAScript标准的基础上加入的动态XML支持的程序语言扩展. 到2019年,目前主流浏览器已经不太支持它了,一些版本的Firefox浏览器或许还可以使用,但它已经在主流浏览器的主 ...
- node版本管理工具nvm的安装及使用
一.什么是nvm nvm是一个node版本管理工具. 由于不同项目依赖的node版本可能不同,所以在维护多个项目时通常需要使用不同的node版本,这时候用nvm来切换不同的node版本就很方便. 官方 ...
- linux下python3环境安装(源码编译的方式安装)
1.将压缩包上传到/usr/local/ 2.解压压缩包 tar -xzvf Python-3.6.6.tgz 3.装一些编译源码需要的依赖文件 yum -y install gcc make cma ...
- Flask学习(三)
数据库操作 数据库驱动(drivers)模块:pymysql.MySQLDB ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库 ...
- 【LeetCode二叉树#20】二叉搜索树转换为累加树,巩固二叉树的遍历(特殊的中序遍历)
将二叉搜索树转换为累加树 力扣题目链接(opens new window) 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 no ...
- Simulink模型指标分析与模型重构的最佳实践 - 软件模型质量保证不可忽视的一环
在基于模型的开发中,优质的模型架构是生成优质代码的必要前提.静态模型分析对于模型的质量保证有着至关重要的作用,同时建模规范已在业内有着广泛而成熟的应用.然而建模规范并非模型设计原则合规性的唯一考量标准 ...
- ABP开发需要用到的命令
0.命令行在哪里执行? 在Visual Studio的"解决方案资源管理器"的解决方案或者项目上点鼠标右键,选择"在终端中打开". 1.安装abp的命令行 官网 ...
- Linux Cheat Sheet
- 复习精简版快速学vue3
vue2中.如果给一个之前没有定义的属性赋值,会得不到时实更新: this.obj.b=2 //由于这个属性之前没有定义,是不支持动态响应,只能用this.$(this.obj,'b',2)也就是说v ...
- Java 程序员第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片
人工智能时代,最需要学习的编程语言是:python .笔者是个 python 小白,昨天花了两个小时,第一次成功运行起来 python 项目 . 项目是 powerpoint-extractor ,可 ...