本文学习redis两大持久化技术之一:RDB(redis database)快照方式持久化备份与还原,以及RDB方式的优缺点

1. RDB相关配置

首先我们先简单了解下Redis7中RDB相关配置

// save <seconds> <changes> [<seconds> <changes> ...]
// 默认配置1小时至少1个key、15分钟60个key、1分钟1W个key变动会进行RDB快照操作
save 3600 1 300 100 60 10000
// 当快照保存失败时禁止redis写入key,一般都是磁盘空间满,与ES类似
stop-writes-on-bgsave-error yes
// 采用LZF算法【对重复值压缩,通过hash表判重】压缩.rdb快照文件
rdbcompression yes
// 采用CRC64算法检查.rdb文件完整性
rdbchecksum yes
// RDB快照文件名称
dbfilename dump.rdb
// RDB快照文件存储目录
dir ./

2. RDB快照还原实践

redis启动后,未进行任何操作截图

通过代码我们写入10100条数据

@SpringBootTest
public class RedisTest {@Autowiredprivate RedissonClient redissonClient;@Testpublic void testRdb() throws InterruptedException {RMap<String, String> rMap = redissonClient.getMap("rdb");for (int i = 0; i < 10020; i++) {rMap.put(i + "", i + "");}Thread.sleep(60000);for (int i = 0; i < 80; i++) {rMap.put(i + "ok", i + "ok");}}
}

由图可以看到,RDB快照已生成,hkeys rdb可以看到有10100个key

我们将生成dump.rdb文件重命名为dump.rdb.bak作为模拟备份文件
执行以下命令后,可以看到系统又重新生成了dump.rdb文件

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> shutdown

现在我们删除dump.rdb文件,并将dump.rdb.bak改为dump.rdb模拟快照还原后启动redis,执行hkeys rdb可以看到只有10020个key在快照中保存了下来

由此我们验证了:1分钟1W个key变动会进行RDB快照,因为1-10020个key是在一分钟内的操作,所以RDB快照保存了下来,而对于10021-10100的key操作是在下一个分钟内的操作,未满足变动条件不进行RDB快照,所以宕机后还原RDB快照后我们发现它们丢失了

对于未满足变动条件的我们可以手工执行来备份

# 异步非阻塞方式备份
127.0.0.1:6379> bgsave
Background saving started
# 同步阻塞方式备份【慎用】
127.0.0.1:6379> save
OK

3. RDB快照流程

在bgsave的时候,采用fork+copyonwrite[写时拷贝技术]技术。fork()是linux的api,用于创建一个子进程。fork()出来的进程共享其父类的内存数据,仅仅是共享fork()出子进程的那一刻的内存数据,后期主进程修改数据对子进程不可见。
主进程fork()子进程之后,内核把主进程中所有的内存页的权限都设为read-only,然后子进程的地址空间指向主进程。这也就是共享了主进程的内存,当主进程写内存时(肯定是主进程写,因为子进程只负责rdb文件持久化工作,不参与客户端的请求),CPU硬件检测到内存页是read-only的,于是触发页异常中断(page-fault),陷入内核的一个中断例程。中断例程中,内核就会把触发的异常的页复制一份(这里仅仅复制异常页,也就是所修改的那个数据页,而不是内存中的全部数据),于是主子进程各自持有独立的一份
copyonwrite总结: fork()出来的子进程共享主进程的物理空间,当主进程有内存写入操作时,read-only内存页发生中断,将触发异常的内存页复制一份(其余的页还是共享主进程的)从而主进程可写,而子进程继续进行老数据的RDB快照

4. RDB快照优缺点

优点:

  • fork+copyonwrite技术,rdb快照不影响redis主进程
  • 适合大规模数据恢复,恢复速度快
  • 适合对数据完整性与一致性要求不高场景
  • 节省磁盘空间

缺点:

  • fork后,对于写时拷贝技术,海量数据修改比较消耗性能
  • redis宕机后,在最后一次快照后的所有修改会丢失

欢迎关注公众号 算法小生 与我沟通交流

17.Redis系列之快照RDB方式持久化相关推荐

  1. Redis系列(一)--安装、helloworld以及读懂配置文件

    再开个redis系列,本系列打算不详细讲一系列的命名的了(会推荐别人写的,人家写的够详细了),我直接就是做redis方案提供,当然一开始还是讲下helloworld和配置文件好了.会逐步更新,欢迎关注 ...

  2. 吃透Redis系列(五):RDB和AOF持久化详细介绍

    Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...

  3. redis学习(九)——数据持久化

    一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的.所以,我们需要将内存中的数据持久 ...

  4. redis 系列17 持久化 AOF

    redis 系列17 持久化 AOF 原文:redis 系列17 持久化 AOF 一.概述 除了上篇介绍的RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能. ...

  5. Redis的持久化机制-RDB方式和AOF方式

    场景 Redis的持久化策略 持久化可以理解为存储,就是将数据存储到一个不会丢失的地方. 如果把数据存储在内存中,电脑关闭或者重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘中就算是一种 ...

  6. Redis持久化——内存快照(RDB)

    最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 最新:Redis持久化--内存快照(RDB) 一文回顾Redis五大对象(数据类型) Redis对象--有序集 ...

  7. 18.Redis系列之AOF方式持久化

    本文学习redis7两大持久化技术之一:AOF(Append Only File)日志追加方式持久化备份与还原,重写以及AOF方式的优缺点 1. AOF相关配置 首先我们先简单了解下Redis7中AO ...

  8. Redis实战和核心原理详解(8)使用快照RDB和AOF将Redis数据持久化到硬盘中

    一.前言 我们知道Redis是一款内存服务器,就算我们对自己的服务器足够的信任,不会出现任何软件或者硬件的故障,但也会有可能出现突然断电等情况,造成Redis服务器中的数据失效.因此,我们需要向传统的 ...

  9. redis(10)--RDB持久化

    目录 保存 命令 保存命令冲突性 载入 自动间隔性保存 数据结构 dirty计数器与lastsave 检查保存条件是否满足 RDB 文件结构 组成部分 DB-DATA部分 KEY-VALUE-PAIR ...

最新文章

  1. linux shell touch更新文件时间
  2. Google Chrome 总提示flash插件过期,用命令行模式解决
  3. 清华体质优良可降5分录取;窃取密钥者奖百万;阿里投入1亿保护方言;腾讯不正当竞争被罚;这就是今天的大新闻...
  4. 网络层:构成超网(CIDR)
  5. 利用Aria2高速下载网盘文件
  6. 金三银四大厂面经总结,mysql创建视图的sql语句
  7. python:random.randint 和 numpy.random.uniform
  8. kali linux 安装中文输入法
  9. csgo服务器与客户端文件不匹配,csgo客户端文件与服务器不匹配怎么办
  10. 读《An Adaptable and Extensible Geometry Kernel》
  11. qq文件对方接收后一定会有提示吗_QQ接收别人发的文件怎么设置不弹出接收信息...
  12. 学术-数学:四色猜想
  13. uni-app在QQ开发者工具上运行
  14. “ 试题管理系统”需求分析报告
  15. org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.Mav
  16. Linux(redhat7.2)本地yum源配置
  17. 【已解决】Unable to negotiate with — port 22: no matching host key type found. Their offer: ssh
  18. ThinkPHP 开发XXXXX后台
  19. 怎么选择虚拟化服务器,支招:中小企业该如何选择虚拟化服务器
  20. Linux对光标的操作与创建文件lseek、creat

热门文章

  1. 学会使用Kafka(一)Kafka是什么以及基本概念
  2. Unity3DRPG人物头顶血条跟随
  3. UWB硬件设计相关内容
  4. macOS Catalina 10.15.1支持AMD RX 5700系列显卡
  5. Artifact activity:war: Error during artifact deployment. See server log for
  6. Y410P用虚拟机装Linux系统,OK6410、Linux2.6.36内核移植,DM9000 驱动移植
  7. 《菏塘月色》欣赏及解说
  8. PTA 九宫格输入法
  9. caffe验证集测试集准确率差别很大的可能原因
  10. 如何加强对Type-C数据线的充电保护?