IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis持久化详解 -> 正文阅读

[大数据]Redis持久化详解

RDB持久化

Redis是基于内存的数据库,如果退出进程,数据将会消失,所以我们可以把内存中的数据持久化到磁盘上,下次开启Redis进程的时候,读取磁盘中的数据到内存中,就可以继续正常使用Redis了

RDB持久化是Redis服务器把数据库当前的状态,压缩成一个二进制的RDB文件保存到磁盘.

数据库状态–>RDB文件 RDB文件–>(恢复)数据库状态

因为RDB文件是保存在硬盘上的,就算Redis服务器停止或者宕机,计算机停机,只要RDB文件存在,Redis服务器就可以用它来还原数据库的状态.

RDB文件的创建和载入

Redis有两个命令可以生成RDB文件,

  1. SAVE
  2. BGSAVE

他们的区别是:

SAVE命令会阻塞Redis服务器,直到RDB文件生成之后才能处理其他命令请求

BGSAVE命令会在后台fork出一个子进程,然后子进程用于生成RDB文件,Redis服务器仍然可以处理命令请求

BGSAVE采用轮询等待的方式 等待子进程的信号(生成RDB结束)

RDB文件的载入没有专门的命令执行, 只要Redis服务器在启动的时候检测到RDB文件的存在,就会自动载入RDB文件.

因为AOF的更新频率比RDB文件高

如果服务器开启了AOF功能,Redis服务器启动的时候就不会载入RDB文件,优先使用AOF文件还原数据库

只有在AOF功能处于关闭状态时,才会默认载入RDB文件

在BGSAVE命令的执行过程中,处理SAVE,BGSAVE,BGREWRITEAOF命令的方式也不同

在Redis服务器执行BGSAVE的过程中,因为SAVE和BGSAVE, BGSAVE和BGSAVE都存在竞争关系,所以Redis服务器会拒绝SAVE和BGSAVE的请求

其次BGSAVE和BGREWRITEAOF命令不能同时执行 如果当前是BGSAVE状态, BGREWRITEAOF将会等到BGSAVE执行后在执行

如果当前是BGREWRITEAOF状态,服务器将会拒绝BGSAVE命令

服务器在载入RDB文件的过程中 会一直处于阻塞状态,知道RDB文件载入完成

自动间隔性保存

Redis允许用户通过配置save选项,让服务器每隔一段时间自动运行BGSAVE命令

save配置文件

save 900 1

save 300 10

save 60 10000

当只要满足三个条件之一,服务器就会执行BGSAVE命令

  • 900秒内至少1次修改
  • 300秒内至少10次修改
  • 60秒内至少10000次修改

服务器会根据save选项设置RedisServer结构的saveparams参数

image-20220402162652699

除了saveparams参数外 服务器还维护了一个dirty计数器和一个lastsave属性

dirty用于记录上次(成功)执行BGSAVE/SAVE命令后数据库的修改次数

lastsave用于记录上次(成功)执行BGSAVE/SAVE命令后的Unix时间戳

image-20220402163314629

假设图10-8位当前服务器的状态,在经过了301秒之后(1378271101)服务器会执行一次BGSAVE,因为在300秒内数据库发生了至少10次修改.

image-20220402163610235

假设BGSAVE命令5秒后执行完成,现在数据库的状态是 dirty计数器被重新置为0, 当前lastsave时间戳被更新为1378271106(1378271101+5)

RDB文件结构

Redis(5字节)db_version(4字节)data_basesEOF(1字节)check_num(8字节)

文件头部的Redis部分为5个字节保存着"Redis" 这五个字符,通过这5个字符可以快速的检查当前文件是否是RDB文件

db_version长度为4字节,记录的是RDB的默认版本号 例"0006"

data_bases包含0个或任意个redis数据库

EOF为1字节,当读到EOF时标志着RDB文件正文内容的结束

check_num是8字节的无符号整数,保存的是一个校验和,check_num的数值是由REDIS,db_version,data_bases,EOF四个部分计算出来的, 作用是可以校验RDB文件是否损坏或错误.

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:18:09  更:2022-04-04 12:21:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:52:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码