08_Redis持久化——RDB方式
【简述】
持久化:Redis能将数据从内存中以某种形式同步到硬盘中,使得重启后可以根据硬盘中的记录恢复数据,这一过程就是持久化。
Redis支持两种方式的持久化,简单来说如下:
RDB方式:会根据指定的规则”定时“将内存中的数据存储在硬盘上
AOF方式:在每次执行命令后将命令本身记录下来。
【RDB方式】
RDB(Redis Database)
RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时,即在指定的时间间隔内,Redis会自动将内存中的所有数据生成一份副本并存储在硬盘上,这个过程即为”快照“。
数据恢复时,将快照文件直接再读取到内存。
Redis会在以下情况下对数据进行快照:
1.根据配置规则进行自动快照
2.用户执行 SAVE 或 BGSAVE 命令
3.执行FLUSHALL命令
4.执行复制(replication)时
【1.根据配置规则进行自动快照】
Redis允许用户自定义快照条件,当符合快照条件时,Redis会自动执行快照操作。
进行快照的条件可以由用户在配置文件redis.conf中自定义。
由两个参数构成:时间窗口M 和 改动的键的个数N
每当时间M被更改的键的个数> N时,即符合快照条件。
redis配置文件中预留的三个快照条件:
save 900 1
save 300 10 //300秒内至少有10个键被修改
save 60 10000
每条快照条件占一行,并且以save参数开头,各个条件之间是”或“的关系。
【2.用户执行SAVE或BGSAVE命令】
除了Redis自动进行快照外,当进行服务重启、手动迁移以及备份时,我们也会用到手动快照操作。
[ SAVE 命令]
当执行SAVE命令时,Redis同步地进行快照操作,在快照执行的过程中,会阻塞所有来自客户端的请求,当Redis中的数据比较多时,这一过程会导致Redis较长时间不响应,所以要尽量避免在生产环境中使用这一命令。
[ BGSAVE命令 ]
需要手动快照时,推荐使用BGSAVE命令。BGSAVE命令可以在后台异步地进行快照操作,快照的同时,服务器依然可以继续响应来自客户端的请求。执行BGSAVE后,Redis会立即返回OK表示开始执行快照操作。如果想知道快照是否完成,可以通过LASTSAVE命令获取最经一次成功执行快照的时间,返回结果是一个Unix时间戳。
【3.执行FLUSHALL命令】
当执行FLUSHALL命令时,Redis会清除Redis中的所有数据,
需要注意,不论清空Redis的过程中是否触发了自动快照条件,只要自动快照的条件不为空,Redis就会执行一次快照操作。
如:当定义的快照条件为1秒内修改10000个键时自动快照,而当Redis中只有一个键时,执行FLUSHALL也会触发快照,即使这一过程实际上只有一个键被修改了。
注意:当没有定义自动快照条件时,即使执行FLUSHALL则不会进行快照。
【4.执行复制时】
当设置了主从模式时,Redis会在复制初始化时进行自动快照。
当使用复制时,即使没有自定义快照条件,并且没有手动执行快照操作,也会生成RDB快照文件。
【快照的原理】
Redis默认会将快照文件存储在Redis当前进程的工作目录中的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别执行快照的存储路径和文件名。
[ 快照的过程 ]
1.Redis使用fork函数复制一份当前进程(父进程)的副本为子进程。
2.父进程会继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件。
3.当子进程写入完所有数据会用该临时文件替换旧的RDB文件,至此一次快照操作完成。
【RDB文件】
通过上述快照的过程,可以发现Redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。
我们可以通过定时任务备份RDB文件来实现Redis数据备份。
Redis启动后会读取RDB快照文件,将数据从硬盘中载入到内存。通常将一个记录1000万个字符串类型键、大小为1GB的快照文件载入到内存中需要20~30秒。
通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据,如果丢失近几秒的数据或者丢失最近更新的几十个键没有很大的影响,可以使用RDB方式,如果数据相对重要,希望将损失降到最小,可以使用AOF方式进行持久化。
【总结——RDB方式的优点】
1.RDB文件是一个很简洁的单文件,它保存了某个时间点的Redis数据,很适合用于做备份。
你可以设定一个时间点对RDB文件进行归档,这样就能在需要的时候很轻易的把数据恢复到不同的版本。
2.基于上面所描述的特性,RDB很适合用于灾备。单文件很方便就能传输到远程的服务器上。
3.RDB的性能很好,需要进行持久化时,主进程会fork一个子进程出来,然后把持久化的工作交给子进程,自己不会有相关的I/O操作。
4.比起AOF,在数据量比较大的情况下,RDB的启动速度更快。
【总结——RDB方式的缺点】
1.RDB容易造成数据的丢失。假设每5分钟保存一次快照,如果Redis因为某些原因不能正常工作,
那么从上次产生快照到Redis出现问题这段时间的数据就会丢失了。
2.RDB使用fork()产生子进程进行数据的持久化,如果数据比较大的话可能就会花费点时间,
造成Redis停止服务几毫秒。如果数据量很大且CPU性能不是很好的时候,停止服务的时间甚至会到1秒。
08_Redis持久化——RDB方式的更多相关文章
- 峰Redis学习(7)Redis 持久化RDB方式
第一节:Redis 持久化介绍 redis所有的数据都存在内存中,所以速度非常快,但是一旦断电等情况,数据就没了.从内存当中同步到硬盘上,这个过程叫做持久化过程. 持久化操作,两种方式:rdb方式.a ...
- Redis的持久化之RDB方式
RDB方式 Redis是默认支持的 优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件) 劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的.也就是积攒 ...
- redis笔记之两种持久化备份方式(RDB & AOF)
Redis支持的两种持久化备份方式(RDB & AOF) redis支持两种持久化方式,一种是RDB,一种是AOF. RDB是根据指定的规则定时将内存中的数据备份到硬盘上,AOF是在每次执行命 ...
- redis持久化的方式RDB 和 AOF
redis持久化的方式RDB 和 AOF 一.对Redis持久化的探讨与理解 目前Redis持久化的方式有两种: RDB 和 AOF 首先,我们应该明确持久化的数据有什么用,答案是用于重启后的数据恢复 ...
- (七)Redis之持久化之RDB方式
一.持久化概念 所有的数据都存在内存中,从内存当中同步到硬盘上,这个过程叫做持久化过程. 使用方法: 1. rdb持久化方法:在指定的时间间隔写入硬盘 2. aof方式:将以日志,记录 ...
- 4、解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制
1.Units单位 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 对大小写不敏感 2.INCLUDES包含 和我们的Struts2配置文件类似,可以通过includes包 ...
- redis 系列16 持久化 RDB
一.概述 Redis是内存数据库,一旦服务器进程退出,服务器中的数据库内存数据状态也会消失.为了解决这个问题,Redis提供了RDB 持久化功能,这个功能可以将redis在内存中的数据库状态保存到磁盘 ...
- Redis持久化的方式
Redis小知识: redis是键值对的数据库,有5中主要数据类型: 字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset) Redis持 ...
- redis持久化 (rdb
RDB(快照持久化) RDB(redis database),可以理解为快照/内存快照,RDB持久化过程是将当前进程中的数据生成快照存储到硬盘中 触发机制RDB持久化的触发机制分为两种,手动触发和自动 ...
随机推荐
- Kafka:Consumer
1.预览 1.1 消费者组(Consumer Group) 一个consumer group可能有若干个consumer实例 同一个group里面,topic的每条信息只能被发送到group下的一个c ...
- 二级C语言真题笔记
二级C语言真题笔记 1. 知识重点:数据类型.循环.数组.函数.指针.结构体与共同体 2. 求程序的运行结果 #include <stdio.h> main() { short i ...
- oracle闪回(flashback)的部分实用操作(彻底删除的除外)
一.数据delete并且commit提交之后的闪回 (一):根据时间来恢复:1.查询数据库当前时间(目的是为了检查数据库时间是否与你电脑时间相近,避免时间不同而将数据恢复到错误时间点)select ...
- Java使用占位符拼接字符串-String.format()的使用
String domain = "www.ykmaiz.com"; int iVisit = 0; String info = String.format("该域名%s被 ...
- 那些H5用到的技术(2)——音频和视频播放
前言audio标签Web Audio API自动播放的问题背景音乐的实现立即播放的问题SoundJSvideo标签播放样式的问题格式的问题总结 前言 正常情况,除了非常简陋的小功能H5,音乐播放是必不 ...
- (转)Python random模块
原文:https://my.oschina.net/cuffica/blog/33336 https://www.cnblogs.com/renpingsheng/p/7105296.html ran ...
- java NIO学前准备
之前一直对NIO感兴趣,无奈对IO的很多概念很模糊,所以对于NIO的学习也是一直半解,最近在网上查阅了很多资料,发现有很多概念是需要反复理解的,有的时候甚至当时理解了,但一段时间后又忘记了,所以决定自 ...
- p2p的UDP打洞原理
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- vi 中插入当前时间
声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...
- FocusBI: SSIS体系结构(原创)
关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. <商业智能教程>pdf下载地址 链接:https://pan.baidu.com/ ...