核心知识点:

1.RDB:将当前数据生成快照保存到硬盘

2.手动触发

  save:会阻塞Redis服务器直到RDB完成。

  bgsave:执行fork创建子进程,由子进程负责RDB操作,阻塞只发生在fork创建子进程期间

3.自动触发

  a.设置save m n

  b.执行全量复制,自动执行bgsave

  c.debug reload会自动触发save

  d.执行shutdown没有开启AOF就会执行bgsave

4.文件处理:

  a.保存:config set dir/dbfilename

  b.压缩:LZF算法,大大降低文件体积

  c.校验

5.优缺点

(1)优点:适合备份和全量复制;恢复数据的速度比AOF块。

(2)缺点:不能实时持久化/秒级持久化,fork属于重量级操作;版本兼容问题

Redis支持RDBAOF两种持久化机制,持久化功能有效地避免因进程退出造成地数据丢失问题,

当下次重启时利用之前持久化的文件即可以实现数据恢复。本节主要介绍RDB持久化的机制。

RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。

1.触发机制

手动触发分别对应save和bgsave命令:

(1)save

save命令会阻塞当前的Redis服务器,直到RDB过程完成为止,对于内存较大的实例会造成长时间的阻塞,线上环境不建议使用。

(2)bgsave

bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。

阻塞只发生在fork阶段,一般时间很短。

显然bgsave命令是针对save阻塞问题做的优化,因此Redis内部所有涉及RDB的操作都采用bgsave的方式,而save命令因此废弃。

除了执行命令手动触发之外,Redis内部还存在自动触发RDB的持久化机制,例如以下场景:

  • 使用save相关设置,如“save m n”。表示m秒内数据集在n次修改时,自动触发bgsave。
  • 如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点。
  • 执行debug reload命令重新加载Redis时,也会自动触发save操作。
  • 默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。

2.流程说明

bgsave是主流的触发RDB持久化方式,下面是它的运作流程:

(1)执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如RDB/AOF子进程,如果存在bgsave命令直接返回。

(2)父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通过info stats命令查看lastest_fork_usec选项,

  可以获取最近一个fork操作的耗时,单位为微秒。

(3)父进程fork完成后,bgsave命令返回“Background saving started”信息并不再阻塞子进程,可以继续响应其它命令。

(4)子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。

  执行lastsave命令可以获取最后一次生成RDB的时间,对应info统计的rdb_last_save_time选项。

(5) 进程发送信号给父进程表示完成,父进程更新统计信息,具体见info_Persistence下的rdb_*相关选项。

3.RDB文件的处理

(1)保存

RDB文件保存在dir配置指定的目录下,文件名通过dbfilename配置指定。

可以通过执行config set dir {newDir}和config set dbfilename {newFileName}运行期动态执行,当下次运行时RDB文件会保存在新目录。

注意:

当遇到坏盘或磁盘写满等情况,可以通过config set dir{new Dir}在线修改文件路径到可用的磁盘路径,

之后执行bgsave进行磁盘切换,同样适用于AOF持久化文件。

(2)压缩

Redis默认采用LZF算法对生成的RDB文件进行压缩处理,压缩后的文件远远小于内存大小,

默认开启,可以通过参数config set rdbcompression {yes|no}动态修改。

注意:

虽然压缩RDB会消耗CPU,但可大幅降低文件体积,方便保存到磁盘或通过网络发送给节点,因此线上环境建议。

(3)校验

如果Redis加载损坏的RDB文件时拒绝启动,这时可以使用Redis提供的redis-check-dump工具检验RDB文件并获取对应的错误信息。

4.RDB的优缺点

(1)RDB的优点

第一、RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间上的数据快照。非常适合用于备份、全量复制等场景。

比如,每6个小时执行bgsave备份,并把RDB文件拷贝到远程机器或文件系统中,用于灾难恢复。

第二、Redis加载RDB恢复数据远远快于AOF的方式。

(2)RDB的缺点

第一、RDB方式数据没办法做到实施持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,

  属于重量级操作,频繁执行成本过高。

第二、RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,

  存在老版本Redis服务无法兼容新版本RDB格式的问题。

Redis持久化——RDB(一)的更多相关文章

  1. Linux - redis持久化RDB与AOF

    目录 Linux - redis持久化RDB与AOF RDB持久化 redis持久化之AOF redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 实验环境准备 备份这个rdb ...

  2. Redis持久化rdb&aof

    Redis持久化rdb&aof 前言 持久化:即把数据存储于断电后不会丢失的设备中,通常是硬盘 常见的持久化方式: 主从:通过从服务器保持持久化,如mongoDB的replication se ...

  3. Redis持久化----RDB和AOF 的区别

    关于Redis说点什么,目前都是使用Redis作为数据缓存,缓存的目标主要是那些需要经常访问的数据,或计算复杂而耗时的数据.缓存的效果就是减少了数据库读的次数,减少了复杂数据的计算次数,从而提高了服务 ...

  4. redis持久化 RDB与AOF

    redis持久化 RDB与AOF RDB与AOF区别 rdb: 基于快照的持久化,速度更快,一般用做备份,主从复制也是依赖于rdb持久化功能 aof:以追加的方式记录redis操作日志的文件,可以最大 ...

  5. redis持久化RDB和AOF

    Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...

  6. 4、解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制

    1.Units单位 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 对大小写不敏感 2.INCLUDES包含 和我们的Struts2配置文件类似,可以通过includes包 ...

  7. redis持久化RDB与AOF

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...

  8. redis持久化 (rdb

    RDB(快照持久化) RDB(redis database),可以理解为快照/内存快照,RDB持久化过程是将当前进程中的数据生成快照存储到硬盘中 触发机制RDB持久化的触发机制分为两种,手动触发和自动 ...

  9. 配置方案:Redis持久化RDB和AOF

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

  10. Redis持久化--RDB+AOF(转)

    1.Redis两种持久化方式 RDB 执行机制:快照,直接将databases中的key-value的二进制形式存储在了rdb文件中 优点:性能较高(因为是快照,且执行频率比aof低,而且rdb文件中 ...

随机推荐

  1. Python学习笔记(一)类和继承的使用

    一年前就打算学Python了,折腾来折腾去也一直没有用熟练,主要是类那一块不熟,昨天用Python写了几个网络编程的示例,感觉一下子迈进了很多.这几天把学习Python的笔记整理一下,内容尽量简洁. ...

  2. Websphere: Stop Server and Uninstall Application

    In WAS, stopping server and uninstalling application are important steps to re-deploy. SET ProfileLo ...

  3. 计算机网络11--OSI參考模型

    本页内容 1.OSI參考模型简单介绍 2.OSI參考模型通信过程 3.OSI參考模型的数据封装 4.数据封装的意义 5.物理层 6.数据链路层 7.网络层 8.传输层 9.会话层 10.表示层 11. ...

  4. Godaddy域名 绑定ip 服务器

    比如我的域名是wmxl.info 第一个红框代表wmxl.info 绑定的 211.83.110.216 第一个代表www.wmxl.info 绑定的 211.83.110.216, 你也可以换一个服 ...

  5. 常用IIS mime类型

    MIME类型 .woff font/x-woff.json application/json.svgz image/svg+xml .ttf application/octet-stream.eot ...

  6. angularjs中的$q

    先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...

  7. fedora20配置静态ip

    在linux的世界里.给主机设置固定ip是这么做的(使用root用户): 1.查看要配的网络接口 用ifconfig查看查看在用的网卡接口,一般都用第一个如:eth0,en1,em1等 2.停用网络自 ...

  8. gulp配置,实例演示

    项目完成后的目录 我们所需要的插件为:gulp-minify-css gulp-concat gulp-uglify gulp-rename del 如下图所示,完成后的项目目录结构: 附加,获取pa ...

  9. 【边做项目边学Android】小白会遇到的问题--Appcompat_V7问题

    问题描写叙述: 首先遇到的问题就是adt版本号的选择,sdk版本号的选择: adt按非小白朋友说的选了最新的ADT-22.3.0,同一时候我也把sdk更新到了最新的(嗯.这个要fanqiang,或者找 ...

  10. web开发中比较常用的html标签

    作为一名web开发人员,总结了一下经常用到的html标签,如下:<html> <head> <!--meta头标签 表示页面三秒后跳转到新浪页面--> <me ...