Redis:只刷面试题,怎可能进大厂,多理解原理(RDB 持久化、AOF持久化)
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持久化)相关推荐
- 吃透Redis系列(五):RDB和AOF持久化详细介绍
Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...
- Redis的RDB与AOF持久化机制
所谓持久化,就是把缓存内容写进磁盘永久存储(你不删,磁盘不坏可不就是永久嘛) RDB RDB 是 Redis 默认的持久化方案. RDB快照(Redis DataBase):当满足一定条件的时候,会把 ...
- Linux 安装Redis-6.2.5,配置及使用(RDB与AOF持久化、sentinel机制、主从复制、Spring Boot 集成 Redis)
CentOS 7 安装Redis-6.2.5版本 Redis采用的是基于内存的单进程 单线程模型 的KV数据库,由C语言编写.官方提供的数据是可以达到100000+的qps 应用场景: 令牌(Toke ...
- 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重写 ...
- Redis RDB、AOF持久化详解
概述 Redis 提供了2种不同的持久化方式,分别为RDB和AOF RDB能够定时地对数据进行快照存储,因为是定时的,所以服务宕机时存在丢失数据的风险 AOF能够记录每一次的写操作,当服务重启的时候会 ...
- 第五章:Redis持久化-AOF持久化
AOF持久化 AOF全称append only file持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的: AOF主要作用是解决了数据实时持久化的问题: 使 ...
- Redis RDB与AOF持久化详解
为什么要有RDB和AOF? Redis数据库基于内存储存数据,而内存的缺点就是当服务器挂掉了,数据就没了. 所以Redis需要持久化来恢复数据,而持久化的方式就有RDB和AOF Redis 持久化 R ...
- Redis:只刷面试题,怎可能进大厂,多理解原理(跳跃表、集合、压缩列表)
aas Redis 没有直接使用C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串) ,而是自己构建了一种名为简单动态字符串(simple dynamic string, SDS ) ...
- Redis:只刷面试题,怎可能进大厂,多理解原理!(Redis的 集群)
asds Redis 集群是 Redis 提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能. asdsadasdasdasdsadasdasdasdsadassdasdsa ...
- Redis:只刷面试题,怎可能进大厂,多理解原理(Redis的服务器)
asds Redis 服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据, 并通过资源管理来维持服务器自身的运转. asdsadasdasdasds ...
最新文章
- PC端微信小程序wxapkg解密
- nginx重定向到其他url方法_高级开发必须掌握Nginx之四,if、set、return
- JSP导入XML不成功的一个原因
- 前端学习(1698):前端系列javascript之原型链和instance
- Gym 100633G Nano alarm-clocks
- 【Autosar RTM】
- unity 接 steam,获取steamID ,username
- 上海企业英语培训机构排名
- python课程设计小结和体会_关于课程设计心得体会
- 使用NOKIA MMS LIBRARY发送中国移动彩信
- 解决VMware 虚拟机中的网络连接出现”受限制或无连接“问题的方法
- API接口错误码设计最佳实践
- ASP.NET MVC 上传文件方法
- 初窥 RAP:如何使用 RAP 进行接口文档管理
- java8 Stream分组求和 reducing
- unity游戏开发知识检测
- xml文件解析(使用解析器)
- uniapp canvas 图片加上文字合成一张新图并保存到手机相册
- Java集合--阻塞队列(LinkedBlockingQueue)
- win10计算机管理没有蓝牙,Win10蓝牙在哪里?Win10蓝牙设置关闭或开启方法图解