走过路过不要错过

点击蓝字关注我们

文章出处:https://www.cnblogs.com/jojop/p/13941195.html

Redis 持久化

我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会因为宕机而丢失。Redis 为我们提供了两种持久化方案,一种是基于快照,另外一种是基于 AOF 日志。接下来就来了解一下这两种方案。

操作系统与磁盘

首先我们需要知道 Redis 数据库在持久化中扮演了什么样的角色,为此我们先来了解数据从 Redis 中到磁盘的这一过程:

  • 客户端向数据库发起 write 指令(数据在客户端的内存中);

  • 数据库收到 write 指令和对应的写数据(数据在服务端内存中);

  • 数据库调用将数据写入磁盘的系统调用函数(数据在系统内核缓冲区);

  • 操作系统将写入缓冲区中的数据写到磁盘控制器中(数据在磁盘缓冲区中);

  • 磁盘控制器将磁盘缓冲区中的数据写入磁盘的物理介质中(数据真正写入磁盘中)。

上面只是简要介绍了一下过程,毕竟真实的缓存级别只会比这更多。不过我们可以从上面了解到,数据库在持久化的过程中主要应该去实现步骤3,也就是将原本在内存中的数据持久化到操作系统的内核缓冲区中。至于下面的两步,则是操作系统需要关心的事,数据库无能为力。数据库通常仅在必要的时候会去调用将数据从内存写入磁盘的系统调用。

持久化方案

对于上面我们所述的持久化过程,Redis 提供了以下几种不同的持久化方案:

  • 利用 RDB 持久化在指定的时间间隔生成数据集的时间点快照(point-in-time );

  • 利用 AOF 持久化将服务器收到的所有写操作命令记录下来,并在服务器重新启动的时候,利用这些命令来恢复数据集。AOF 的命令使用的是与 Redis 本身协议的命令一致,通过追加的方式将数据写入备份文件中,同时当备份文件过大时,Redis 也能对备份文件进行重压缩。

  • 如果仅希望数据只在数据库运行时存在,那么还可以完全禁用掉持久化机制;

  • Redis还可以同时使用 AOF 持久化和 RDB 持久化。在这种情况下,当 AOF 重启时,会优先使用 AOF 文件去恢复原始数据。因为 AOF 中保存的数据通常比 RDB 中保存的数据更加完整。

接下来就重点讲解 RDB 持久化方案与 AOF 持久化方案之间的异同。

RDB 持久化

RDB(Redis Database) 通过快照的形式将数据保存到磁盘中。所谓快照,可以理解为在某一时间点将数据集拍照并保存下来。Redis 通过这种方式可以在指定的时间间隔或者执行特定命令时将当前系统中的数据保存备份,以二进制的形式写入磁盘中,默认文件名为dump.rdb

RDB 的触发有三种机制,执行save命令;执行bgsave命令;在redis.config中配置自动化。

save 触发

Redis是单线程程序,这个线程要同时负责多个客户端套接字的并发读写操作和内存结构的逻辑读写。而save命令会阻塞当前的Redis服务器,在执行该命令期间,Redis无法处理其他的命令,直到整个RDB过程完成为止,用一张图描述以下:

当这条指令执行完毕,将RDB文件保存下来后,才能继续去响应请求。这种方式用于新机器上数据的备份还好,如果用在生产上,那么简直是灾难,数据量过于庞大,阻塞的时间点过长。这种方式并不可取。

bgsave 触发

为了不阻塞线上的业务,那么Redis就必须一边持久化,一边响应客户端的请求。所以在执行bgsave时可以通过fork一个子进程,然后通过这个子进程来处理接下来所有的保存工作,父进程就可以继续响应请求而无需去关心I/O操作。

redis.config 配置

上述两种方式都需要我们在客户端中去执行save或者bgsave命令,在生产情况下我们更多地需要是自动化的触发机制,那么Redis就提供了这种机制,我们可以在redus.config中对持久化进行配置:

Copy

redis rdb aof区别_Redis 持久化之 RDB 与 AOF 详解相关推荐

  1. springboot redis 断线重连_Redis复制:部分同步PSYNC详解

    概述 在Redis2.8之前,如果从服务器在主从复制的过程中,出现了断线,重连之后需要全量同步一次主服务器上面的数据,即从服务器发送SYNC命令给主服务器,请求进行全量同步,但是断线重连之后,从服务器 ...

  2. mysql防止超发_PHP+redis实现的限制抢购防止商品超发功能详解

    本文实例讲述了PHP+redis实现的限制抢购防止商品超发功能.分享给大家供大家参考,具体如下: redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用.redis中key的原子自 ...

  3. redis rdb aof区别_Redis的持久化机制:RDB和AOF

    什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 对于只把Redis当缓存来用的项目来说,数据 ...

  4. redis rdb aof区别_Redis(三):持久化RDB,fork.copyonwrite,AOF,RDBamp;AOF混合使用

    Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制. Redis的持久化有两种,第一种是快照, ...

  5. redis缓存架构-02-两种持久化机制(RDB和AOF)

    1.两种持久化机制的介绍 1.1 RDB 周期性的生成redis内存数据的一份完整的快照 1)根据配置的检查点,生产rdb快照文件,fork一个子线程,将数据dump到rdb快照文件中,完成rdb文件 ...

  6. 查看redis aof内存_Redis持久化问题定位与优化技巧

    今天主要分享继Redis持久化方式RDB.AOF之后的一些常用的Redis问题定位于优化方式.这里主要CPU.内存.磁盘在三个维度去分析问题! Fork操作 当Redis做RDB或AOF重写时,一个必 ...

  7. redis 重新加载_Redis持久化和Redis持久化方式

    1.啥是Redis持久化 持久化就是把内存中的数据存到硬盘中去,防止进程退出后数据丢失. 分析:redis 如果仅仅只是将数据缓存在内存里面,如果 redis 宕机了再重启,内存里的数据将全部丢失.为 ...

  8. redis队列优先级java实现_Redis 实现队列原理的实例详解

    Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后 ...

  9. Redis中五大基本数据类型和三种特殊数据类型详解

    目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...

最新文章

  1. 学习笔记——XSLT转换器的使用(Xalan和Saxon) .(转)
  2. Mysql多表查询(案例1)
  3. python窗口显示表格_pyqt 调用tablewidget窗口时无法显示窗口内容
  4. vs2010 设计视图中控件无法加载,提示未将对象设置到对象的实例。
  5. hbase hbck的参数使用
  6. React Native 学习记录
  7. 将Rosbag中的Compressed类型的图像转换成raw类型
  8. 可做fft分析吗_做数据分析的你,真的会5W2H分析法吗?
  9. Excel中如何使用COLUMN和COLUMNS函数
  10. 微信图文美化编辑器试试构思编辑器
  11. Andriod编程基础(一):Andriod的优势及光明前景
  12. 零基础云开发一个投票小程序 | 我的投票列表页
  13. 案例分享:建设企业网上办公综合平台
  14. 6大多人协作工具推荐
  15. 11.(地图数据篇)OSM数据如何下载使用
  16. Software Version 1976
  17. 使用Java代码生成RSA公私钥的.pem文件
  18. 第38篇:Checkmarx代码审计/代码检测工具的使用教程(1)
  19. 移动OA办公系统打造高效信息化企业
  20. TX Text Control 30.0

热门文章

  1. DiscoveryService.getRemoteAdvertisements是否会获得本地通告?
  2. 未来十大技能职场吃香
  3. linux删除文件操作
  4. audio unity 加速_浅谈Unity中Android、iOS音频延迟
  5. Liunx 系统调优
  6. 操作系统内存分配算法_操作系统基础45-伙伴系统和slab内存分配
  7. manjaro linux 教程,Manjaro 使用基础
  8. 最小生成树和最短路径
  9. java公钥加密私钥解密过程_GPG加密解密过程
  10. VUE 入坑系列 一 双向绑定