aas 因为Redis 是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题, Redis 提供了RDB 持久化功能,这个功能可以将Redis 在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。
asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Redis设计与实现》


RDB持久化:

asdasa RDB 待久化既可以手动执行,也可以根据服务器配置选项定期执行。

asdasa 功能:将某个时间点上的数据库状态保存到一个RDB 文件。

asdasaRDB 持久化功能所生成的 RDB 文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB 文件时的数据库状态。


RDB 文件的创建与载入:

aa ⒈有两个 Redis 命令可以用于生成 RDB文件:

adsa ① SAVE: SAVE 命令会阻塞 Redis 服务器进程, 直到RDB 文件创建完毕为止(在服务器进程阻塞期间,服务器不能处理任何命令请求,即客户端发送的所有命令请求都会被拒绝。)。

sdssa② BGSAVE: BGSAVE 命令会派生出一个子进程,然后由子进程负责创建RDB 文件,服务器进程(父进程)继续处理命令请求。

aa ⒉RDB 文件的 载入工作是在 服务器启动时自动执行的。 只要Redis 服务器在启动时检测到RDB 文件存在,它就会自动载入RDB 文件。

aa ⒊启用流程:因为AOF文件的更新频率通常比RDB 文件的更新频率高,所以:

adsa ①、如果服务器开启了AOF 持久化功能,那么服务器会优先使用AOF 文件来还原数据库状态。

adsa ②、只有在AOF 持久化功能处于关闭状态时, 服务器才会使用RDB 文件来还原数据库状态。

aa ⒋BGSAVE 命令执行时的服务器状态:

aadsad因为BGSA VE 命令的保存工作是由子进程执行的,所以在子进程创建RDB 文件的过程中,Redis 服务器仍然可以继续处理客户端的命令请求。但是要注意:SAVE 、BGSAVE 、BGREWRITEAOF 这三个命令。

aadsdas①、服务器禁止 SAVE 命令和 BGSAVE 命令同时执行是为了避免父进程( 服务器进程)和子进程同时执行两个rdbSave 调用,防止产生竞争条件。
aadsdas②、在BGSAVE 命令执行期间,客户端发送的BGSAVE 命令会被服务器拒绝,因为同时执行两个BGSAVE 命令也会产生竞争条件。
aadsdas③、BGREWRITEAOF 和BGSAVE 两个命令不能同时执行:因为 BGREWRITEAOF 和 BGSAVE 两个命令的实际工作都由子进程执行,所以这两个命令在操作方面并没有什么冲突的地方,不能同时执行它们只是一个 性能方面的考虑 一并发出两个子进程,并且这两个子进程都同时执行 大量的磁盘写入操作,这怎么想都不会是一个好主意。

aa ⒌自动 间隔性 保存

aadsad因为 BGSAVE 命令可以在不阻塞服务器进程的情况下执行,所以 Redis让服务器每隔一段时间自动执行一次BGSAVE 命令。 (用户可以通过save 选项设置多个保存条件,但只要其中任意一个条件被满足, 服务器就会执行BGSAVE 命令)

aadsdas①、服务器在900 秒之内,对数据库进行了至少1 次修改。

aadsdas②、服务器在300 秒之内,对数据库进行了至少10 次修改。

aadsdas③、服务器在6 0 秒之内,对数据库进行了至少10000 次修改。

aadsad这些条件保存到了 redisServer结构的saveparams 数组属性中:

aa ⒍dirty 计数器和lastsave 属性

aadsad除了 savepararns 数组之外,服务器状态还维持着一个 dirty 计数器,以及一个 lastsave 属性:

aadsdas①、dirty 计数器:记录距离上一次成功执行SAVE 命令或者 BGSAVE 命令之后,服务器对数据库状态(服务器中的所有数据库)进行了多少次修改(包括写入、删除、更新等操作)。
aadsdas②、lastsave 属性:是一个UNIX 时间戳,记录了服务器 上一次成功执行SAVE 命令或者BGSAVE 命令的时间。

aa ⒎检查保存条件是否满足:Redis 的服务器 周期性操作函数serverCron 默认每隔100 毫秒就会执行一次,该函数用于对正在运行的服务器进行维护,它的其中一项工作就是检查save 选项所设置的保存条件是否已经满足,如果满足的话,就执行BGSAVE命令。


ROB 文件结构:

aa ⒈RDB文件结构:

adsadsa 大写单词:标示常量。全小写单词:标示变量和数据。

adsadsaREDIS : 长度为 5 字节,保存着" REDIS " 五个字符。程序可以在载入文件时,快速检查所载入的文件是否RDB 文件。(因为RDB保存的是二进制文件,而不是C 宇符串,所以尾部不用加’\0’ )。

adsadsadb_version属性: 长度为 4 字节,记录了版本号,比如" 000 6" 就代表RDB 文件的 版本,为第六版。

adsadsadatabases 属性: 部分包含着零个或任意多个数据库,以及各个数据库中的键值对数据。

adsadsaEOF: 常量的长度为 1 字节,这个常扯标志着 RDB 文件 正文内容的结束。

adsadsacheck_sum: 是一个 8 字节长的无符号整数,保存着一个 校验和,这个校验和是程序通过对前四个部分的内容进行计算得出。

aa ⒉databases 部分:

adsadsa一个RDB 文件的databases 部分 可以保存任意多个非空数据库。

adsadsaeg:

adsadsaSELECTDB 属性: 长度为 1 字节,表示 接下来要读入的是一个数据库号码。

adsadsadb_number属性: 保存着一个数据库号码,根据号码的大小不同,这个部分的长度可以是 1 字节、2 字节或者5 字节。(服务器会调用SELECT命令,根据读入的数据库号码进行数据库切换)

adsadsakey_value_pairs属性: 部分保存了数据库中的所有键值对数据,如果键值对带有过期时间,那么过期时间也会和键值对保存在一起。

aa ⒊key_value_pairs 部分:

adsadsaRDB 文件中的每个key_value_pairs 部分都保存了一个或以上数量的键值对,如果键值对带有过期时间的话,那么键值对的过期时间也会被保存在内。
adsadsaeg:
adsdsaadsa①、不带过期时间的键值对 在RDB 文件中由三部分组成:

adsdsdsadasaadsaTYPE属性:记录了value 的类型。(REDIS_ROB_TYPE_STRING…)
adsdsaadsa②、带过期时间的键值对 在RDB 文件中由四部分组成:

adsdsdsadasaadsaEXPIRETIME_MS 属性: 长度为1 字节,是一个以毫秒为单位的过期时间。

adsdsdsadasaadsams属性: 是一个8 字节长的带符号整数,记录着一个以毫秒为单位的UNIX 时间戳,这个时间戳就是键值对的过期时间。


RDB持久化总结:

addsa①、RDB 文件用于保存和还原Redis 服务器所有数据库中的所有键值对数据。

addsa②、SAVE 命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器。BGSAVE 令由子进程执行保存操作,所以该命令不会阻塞服务器。

addsa③、服务器状态中会保存所有用save 选项设置的保存条件,当任意一个保存条件被满足时,服务器会自动执行BGSAVE 命令。

addsa④、RDB 文件是一个 经过压缩的二进制文件,由多个部分组成。

addsa⑤、对于不同类型的键值对, RDB 文件会使用不同的方式来保存它们。

Redis:只刷面试题,怎可能进大厂,多理解原理(RDB 持久化、AOF持久化)相关推荐

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

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

  2. Redis的RDB与AOF持久化机制

    所谓持久化,就是把缓存内容写进磁盘永久存储(你不删,磁盘不坏可不就是永久嘛) RDB RDB 是 Redis 默认的持久化方案. RDB快照(Redis DataBase):当满足一定条件的时候,会把 ...

  3. Linux 安装Redis-6.2.5,配置及使用(RDB与AOF持久化、sentinel机制、主从复制、Spring Boot 集成 Redis)

    CentOS 7 安装Redis-6.2.5版本 Redis采用的是基于内存的单进程 单线程模型 的KV数据库,由C语言编写.官方提供的数据是可以达到100000+的qps 应用场景: 令牌(Toke ...

  4. Redis 中的 持久化 AOF持久化 打开AOF持久化功能 设置AOF文件的冲洗频率 AOF重写 AOF持久化的优缺点

    这里写目录标题 15.2 AOF持久化 15.2.1 打开AOF持久化功能 15.2.2 设置AOF文件的冲洗频率 15.2.3 AOF重写 1.BGREWRITEAOF命令 其他信息 2.AOF重写 ...

  5. Redis RDB、AOF持久化详解

    概述 Redis 提供了2种不同的持久化方式,分别为RDB和AOF RDB能够定时地对数据进行快照存储,因为是定时的,所以服务宕机时存在丢失数据的风险 AOF能够记录每一次的写操作,当服务重启的时候会 ...

  6. 第五章:Redis持久化-AOF持久化

    AOF持久化 AOF全称append only file持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的: AOF主要作用是解决了数据实时持久化的问题: 使 ...

  7. Redis RDB与AOF持久化详解

    为什么要有RDB和AOF? Redis数据库基于内存储存数据,而内存的缺点就是当服务器挂掉了,数据就没了. 所以Redis需要持久化来恢复数据,而持久化的方式就有RDB和AOF Redis 持久化 R ...

  8. Redis:只刷面试题,怎可能进大厂,多理解原理(跳跃表、集合、压缩列表)

    aas Redis 没有直接使用C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串) ,而是自己构建了一种名为简单动态字符串(simple dynamic string, SDS ) ...

  9. Redis:只刷面试题,怎可能进大厂,多理解原理!(Redis的 集群)

    asds Redis 集群是 Redis 提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能. asdsadasdasdasdsadasdasdasdsadassdasdsa ...

  10. Redis:只刷面试题,怎可能进大厂,多理解原理(Redis的服务器)

    asds Redis 服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据, 并通过资源管理来维持服务器自身的运转. asdsadasdasdasds ...

最新文章

  1. PC端微信小程序wxapkg解密
  2. nginx重定向到其他url方法_高级开发必须掌握Nginx之四,if、set、return
  3. JSP导入XML不成功的一个原因
  4. 前端学习(1698):前端系列javascript之原型链和instance
  5. Gym 100633G Nano alarm-clocks
  6. 【Autosar RTM】
  7. unity 接 steam,获取steamID ,username
  8. 上海企业英语培训机构排名
  9. python课程设计小结和体会_关于课程设计心得体会
  10. 使用NOKIA MMS LIBRARY发送中国移动彩信
  11. 解决VMware 虚拟机中的网络连接出现”受限制或无连接“问题的方法
  12. API接口错误码设计最佳实践
  13. ASP.NET MVC 上传文件方法
  14. 初窥 RAP:如何使用 RAP 进行接口文档管理
  15. java8 Stream分组求和 reducing
  16. unity游戏开发知识检测
  17. xml文件解析(使用解析器)
  18. uniapp canvas 图片加上文字合成一张新图并保存到手机相册
  19. Java集合--阻塞队列(LinkedBlockingQueue)
  20. win10计算机管理没有蓝牙,Win10蓝牙在哪里?Win10蓝牙设置关闭或开启方法图解

热门文章

  1. 一年级有计算机教学吗,一年级信息技术教学计划范文
  2. postgresql源码安装
  3. CV学习笔记【1】:transforms
  4. 论文常用 | FineBI v6.0 新图表 | 箱形图
  5. Python数据类型函数
  6. 用计算机程序计算鸡兔同笼,Linux脚本基础篇-鸡兔同笼问题(示例代码)
  7. 分享java旷课版的SSM框架源码
  8. 2021-11-09水洗碳带有什么特点
  9. 条码打印机、色带、碳带的知识分享 | 条码打印机色带碳带的选购经验 | 鸿顺捷知识分享
  10. B站笔试真题之[编程题]脸滚键盘