当前位置:网站首页>Redis入门完整教程:RDB持久化
Redis入门完整教程:RDB持久化
2022-07-06 19:11:00 【谷哥学术】
RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持
久化过程分为手动触发和自动触发。
5.1.1 触发机制
手动触发分别对应save和bgsave命令:
·save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存
比较大的实例会造成长时间阻塞,线上环境不建议使用。运行save命令对应
的Redis日志如下:
* DB saved on disk
·bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子
进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。运行
bgsave命令对应的Redis日志如下:
* Background saving started by pid 3151
* DB saved on disk
* RDB: 0 MB of memory used by copy-on-write
* Background saving terminated with success
显然bgsave命令是针对save阻塞问题做的优化。因此Redis内部所有的涉
及RDB的操作都采用bgsave的方式,而save命令已经废弃。
除了执行命令手动触发之外,Redis内部还存在自动触发RDB的持久化
机制,例如以下场景:
1)使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改
时,自动触发bgsave。
2)如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文
件并发送给从节点,更多细节见6.3节介绍的复制原理。
3)执行debug reload命令重新加载Redis时,也会自动触发save操作。
4)默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则
自动执行bgsave。
5.1.2 流程说明
bgsave是主流的触发RDB持久化方式,下面根据图5-1了解它的运作流
程。
1)执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进
程,如RDB/AOF子进程,如果存在bgsave命令直接返回。
2)父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通
过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗
时,单位为微秒。
3)父进程fork完成后,bgsave命令返回“Background saving started”信息
并不再阻塞父进程,可以继续响应其他命令。
4)子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后
对原有文件进行原子替换。执行lastsave命令可以获取最后一次生成RDB的
时间,对应info统计的rdb_last_save_time选项。
5)进程发送信号给父进程表示完成,父进程更新统计信息,具体见
info Persistence下的rdb_*相关选项。
5.1.3 RDB文件的处理
保存:RDB文件保存在dir配置指定的目录下,文件名通过dbfilename配
置指定。可以通过执行config set dir{newDir}和config set
dbfilename{newFileName}运行期动态执行,当下次运行时RDB文件会保存到
新目录。
运维提示
当遇到坏盘或磁盘写满等情况时,可以通过config set dir{newDir}在线
修改文件路径到可用的磁盘路径,之后执行bgsave进行磁盘切换,同样适用
于AOF持久化文件。
压缩:Redis默认采用LZF算法对生成的RDB文件做压缩处理,压缩后的
文件远远小于内存大小,默认开启,可以通过参数config set
rdbcompression{yes|no}动态修改。
运维提示
虽然压缩RDB会消耗CPU,但可大幅降低文件的体积,方便保存到硬盘
或通过网络发送给从节点,因此线上建议开启。
校验:如果Redis加载损坏的RDB文件时拒绝启动,并打印如下日志:
# Short read or OOM loading DB. Unrecoverable error, aborting now.
这时可以使用Redis提供的redis-check-dump工具检测RDB文件并获取对
应的错误报告。
5.1.4 RDB的优缺点
RDB的优点:
·RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据
快照。非常适用于备份,全量复制等场景。比如每6小时执行bgsave备份,
并把RDB文件拷贝到远程机器或者文件系统中(如hdfs),用于灾难恢复。
·Redis加载RDB恢复数据远远快于AOF的方式。
RDB的缺点:
·RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运
行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。
·RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式
的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题。
针对RDB不适合实时持久化的问题,Redis提供了AOF持久化方式来解
决。
边栏推荐
- C # / vb. Net supprime le filigrane d'un document word
- S120驱动器基本调试步骤总结
- Web3's need for law
- Code line breaking problem of untiy text box
- PCL 常用拟合模型及使用方法
- 牛客编程题--必刷101之双指针篇
- C#/VB.NET 删除Word文档中的水印
- The cities research center of New York University recruits master of science and postdoctoral students
- Overall query process of PostgreSQL
- The panel floating with the mouse in unity can adapt to the size of text content
猜你喜欢
Detailed explanation of line segment tree (including tested code implementation)
HAVE FUN | “飞船计划”活动最新进展
Hash table and full comments
Google Earth engine (GEE) -- 1975 dataset of Landsat global land survey
Web3's need for law
B站6月榜单丨飞瓜数据UP主成长排行榜(哔哩哔哩平台)发布!
MySQL - common functions - string functions
记一次JAP查询导致OOM的问题分析
postgresql之整體查詢大致過程
The annual salary of general test is 15W, and the annual salary of test and development is 30w+. What is the difference between the two?
随机推荐
[Mori city] random talk on GIS data (II)
Statistics of radar data in nuscenes data set
一本揭秘字节万台节点ClickHouse背后技术实现的白皮书来了!
数论 --- 快速幂、快速幂求逆元
[software test] the most complete interview questions and answers. I'm familiar with the full text. If I don't win the offer, I'll lose
Error in fasterxml tostringserializerbase
差异与阵列和阵列结构和链表的区别
Difference and the difference between array and array structure and linked list
The third season of ape table school is about to launch, opening a new vision for developers under the wave of going to sea
unity中跟随鼠标浮动的面板,并可以自适应文字内容的大小
Huitong programming introductory course - 2A breakthrough
Summer Challenge database Xueba notes (Part 2)~
Classify the features of pictures with full connection +softmax
NuScenes数据集关于Radar数据的统计
leetcode:5. Longest palindrome substring [DP + holding the tail of timeout]
所谓的消费互联网仅仅只是做行业信息的撮合和对接,并不改变产业本身
4 -- Xintang nuc980 mount initramfs NFS file system
[C # notes] use file stream to copy files
wzoi 1~200
unity webgl自适应网页尺寸