前言:

redis持久化分为RDB和AOF,此篇博文着重讲解RDB方式的持久化。演示系统 centos7。

1、官网说明

地址:https://redis.io/topics/persistence
以下内容为有道词典翻译

Redis持久性

RDB持久性按指定的时间间隔执行数据集的时间点快照。

RDB的优势

RDB是Redis数据的非常紧凑的单文件时间点表示。RDB文件非常适合备份。例如,您可能希望在最近的24小时内每小时存档一次RDB文件,并在30天之内每天保存一次RDB快照。这使您可以在灾难情况下轻松还原数据集的不同版本。
RDB对于灾难恢复非常有用,它是一个紧凑的文件,可以传输到远程数据中心或Amazon S3(可能已加密)上。
RDB最大限度地提高了Redis的性能,因为Redis父进程为了持久化而需要做的唯一工作就是分叉一个孩子,其余所有工作都要做。父实例将永远不会执行磁盘I / O或类似操作。
与AOF相比,RDB允许大型数据集更快地重启。

RDB的缺点

如果您需要最大程度地减少数据丢失的可能性(如果Redis停止工作,例如在断电之后),则RDB不好。您可以在生成RDB的位置配置不同的保存点(例如,在至少五分钟之后,对数据集进行100次写入,但是您可以有多个保存点)。但是,通常会每隔五分钟或更长时间创建一次RDB快照,因此,如果Redis出于任何原因在没有正确关闭的情况下停止工作,则应该准备丢失最新的数据分钟。
RDB需要经常使用fork()才能使用子进程将其持久化在磁盘上。如果数据集很大,Fork()可能很耗时,并且如果数据集很大且CPU性能不佳,则可能导致Redis停止为客户端服务几毫秒甚至一秒钟。AOF还需要fork(),但您可以调整要重写日志的频率,而无需权衡持久性。

2、简单理解

看了官网说的那样,似乎有点生硬难懂,接下来用硅谷阳哥的笔记中的内容做下说明:RDB持久化就是指在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能

fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程

RDB是redis默认持久化的方式,不需要进行配置,默认就使用这种机制,那么这种机制在redis的配置文件 redis.conf中默认是如何设置的,请看配置文件源码:

#   after 900 sec (15 min) if at least 1 key changed
save 900 1
#   after 300 sec (5 min) if at least 10 keys changed
save 300 10
#   after 60 sec if at least 10000 keys changed
save 60 10000

以上第一个数字表示的是时间,第二个数字表示的是变化的key,
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。实际上,只要满足以上任何一个条件,redis就会持久化一次(也就是往磁盘上复制一份数据) 当save ""时,表示删除之前配置的所有save

3、如何触发RDB快照(SNAPSHOTTING)

首先我们要知道RDB默认生成的文件为dump.rdb,可以用来恢复数据(备份文件)

(1)save触发快照

如下,我先打开redis的客户端,set了三个值,分别为kv ok an,上边默系统给出的默认

save 900 1
save 300 10
save 60 10000

我自己测了第一个,就是等了大概十五分钟,出现了dump.rdb文件,这里你们可以去测,这里我们强制触发RDB快照。
就是输入save,然后回车,如下图

完成之后,我们打开我们的data文件夹,出现了了dump.rdb

此时我们将dump.rdb备份一下,正确的姿势是备份到另一台服务器,但是呢,这里只是为了演示,我就在相同路径下备份一个别名的文件吧
命令cp dump.rdb dump_new.rdb

接下来shutdown我们的客户端

然后再次启动我们的redis客户端,和服务端,进入到客户端输入keys *,如下图,出现了我们刚刚持久化后的键 a、k、o,成功恢复。

上面我们还备份了一个叫做dump_new.rdb的文件,这个文件刚才说过应该出现在另一台服务器上,是为了解决如果我的这台服务器崩溃问题,此时还是做一个小测试吧,输入
flushall,清空所有的数据库,这里要注意,它也会产生dump.rdb文件,但里面是空的,自己玩玩用这个命令可以,要是在生产服务器,或者测试服务器上输入此命令,感觉你的队友会干死你。突然自己的数据没有了,多么崩溃的事情。此时我们get a 返回nil 证明我们已经将数据清空了

获取目录:输入命令CONFIG GET dir,目录为data

此时我们删除data 下的dump.rdb文件,然后将dump_new.rdb文件重命名为dump.rdb,因为redis默认解析名字为dump.rdb的文件。

此时重新启动你的redis服务端和客户端:
输入keys *发现数据恢复

(2) 命令 bgsave

可以通过lastsave命令获取最后一次成功执行快照的时间,客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。

接下来说下SAVE和BGSAVE的区别:
SAVE 保存是阻塞主进程,客户端无法连接redis,等SAVE完成后,主进程才开始工作,客户端可以连接

BGSAVE 是fork一个save的子进程,在执行save过程中,不影响主进程,客户端可以正常链接redis,等子进程fork执行save完成后,通知主进程,子进程关闭
(3)flushall (慎用)
这个命令也会产生dump.rdb文件,但里面是空的,无意义

4、动态停止RDB保存规则的方法:

redis-cli config set save ""

5、RDB的优缺点小总结


优点:

适合大规模数据恢复
节省空间
对数据完整性和一致性要求不高
恢复速度快

缺点:

在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改
fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑,数据量大的时候,耗性能

【redis 四】一文搞懂redis持久化之RDB相关推荐

  1. redis 缓存过期默认时间_缓存的必知必会:一文搞懂Redis持久化和过期机制

    本文主要介绍了 Redis 持久化的两种机制:RDB 和 AOF,以及键过期的策略:惰性删除和定期删除,还有 RDB.AOF 和复制功能对过期键的处理. RDB RDB 是 Redis 持久化的第一种 ...

  2. 一文搞懂 Redis

    一 什么是NoSQL? Nosql = not only sql(不仅仅是SQL) 关系型数据库:列+行,同一个表下数据的结构是一样的. 非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展. ...

  3. 图文结合!一文搞懂 Redis 常用知识点!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | rrd.me/fcM4t 常用的 SQL 数据 ...

  4. 一文搞懂redis的存储机制AOF与RDB

    RDB: 指定的时间间隔内将内存中的数据集快照写入磁盘,RDB持久化可以手动触发,也可以自动触发. 简单概述:RDB的备份是如何执行的 Redis会单独创建(fork) -个子进程来进行持久化,会先将 ...

  5. 一文搞懂Redis缓存穿透/击穿/雪崩

    缓存穿透 问题描述 缓存穿透是指查询一个一定不存在的数据,由于缓存时不命中的,则需要从数据库中查询.查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库中去查询,进而增大了数据库的压力 ...

  6. LeetCode刷题复盘笔记—一文搞懂完全背包之322. 零钱兑换问题(动态规划系列第十四篇)

    今日主要总结一下动态规划完全背包的一道题目,322. 零钱兑换 题目:322. 零钱兑换 Leetcode题目地址 题目描述: 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amo ...

  7. python中gbk字符原因报错_不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码...

    原标题:不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码 程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广, ...

  8. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  9. 一文搞懂 Raft 算法

    一文搞懂Raft算法 正文 raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos.但Paxos是:少数真正理 ...

最新文章

  1. WebAssembly 浏览器中运行c/c++模块
  2. Java 字节数组(byte[])和整型(int)的相互转换
  3. 2019牛客多校2 H Second Large Rectangle(悬线法)
  4. 开机启动脚本/etc/init.d/rcS
  5. HTTP的同源策略与跨域资源共享(CORS)机制
  6. 技术干货 | 闲鱼:一个优秀的 Push 平台,需要经历怎样的前世今生
  7. Linux 定时执行shell 脚本
  8. 拼接图像亮度均匀调整_品质不变 价格更香 | 爆款拼接屏新品上市
  9. 图片 button 去背景色_不会PS没关系,用Word更换证件照背景色只要10秒!
  10. linux打开core文件,[转载]linux下core文件设置与查看
  11. #openssl #爆重大漏洞heartbleed,危及两亿网民!!!
  12. cron在线生成表达式
  13. Java 项目中使用 TongLink/Q 实现消息队列传输
  14. AFDX(ARINC664)的网络协议——IP层
  15. hololens 播放video
  16. 13号线ab线规划图_展望北京地铁13号线拆分AB线的进度:工程复杂,2022年完工难度大...
  17. ADS1115的使用教程(IIC)
  18. python报错:Empty suite
  19. Swift入门笔记(二)
  20. 简单实现mui-底部选项卡

热门文章

  1. Paper Reading——MoreFusion: Multi-object Reasoning for 6D Pose Estimation from Volume基于体素融合的多目标6D位姿估计
  2. asp.net页面的AutoEventWireup=“true“属性设置
  3. aspx repeater 用法_详解ASP.NET-----Repeater数据控件的用法总结
  4. springboot集成ribbon
  5. 2006危险进程集粹
  6. 三星Gear VR与Oculus Rift DK2全方位比拼
  7. linux 磁盘挂载及查看磁盘
  8. Jvm从入门到精通(全)
  9. 【干货书】深度伪造 (DeepFakes):创造,检测和影响
  10. SQL注入攻击常见方式及测试方法