Redis学习笔记(八) RDB持久化

Redis学习笔记(八) RDB持久化Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到磁盘,那么服务器 进程一旦退出,服务器中的数据库状态也会消失不见。 为了解决这个问题,Red

Redis学习笔记(八) RDB持久化

Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到磁盘,那么服务器 进程一旦退出,服务器中的数据库状态也会消失不见。

为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将数据库状态保存到磁盘里面

1、RDB文件的创建与载入

Redis可以使用SAVE或BGSAVE命令创建RDB文件。

SAVE命令会阻塞服务器进程,直到RDB文件创建完毕,在服务器阻塞过程中服务器不能处理任何命令,所以此时客户端发送来的命令都会被拒绝。

BGSAVE命令会派生一个子线程,然后由子线程负责创建RDB文件,服务器进程(主进程)继续处理命令。

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

由于AOF文件的更新频率通常比RDB文件更新频率高,所以如果服务器开启了AOF,那么服务器优先从AOF文件还原数据库,只有AOF关闭时,服务器才会使用RDB文件还原数据库。

BGSAVE命令执行时,Redis服务器处理SAVE、BGSAVE、BGREWRITEAOF命令方式会与平时不同。

1、SAVE命令会被服务器拒绝,服务器禁止SAVE、BGSAVE命令同时执行,是为了避免主线程与子线程同时执行rdbSave产生竞争条件。

2、BGSAVE命令同样也会被拒绝,因为两个BGSAVE命令也会产生竞争条件。

3、BGREWRITEAOF命令会被延迟到BGSAVE命令执行完毕后执行,如果 BGREWRITEAOF命令正在执行,那么客户端发送的BGSAVE命令会被服务器拒绝。

RDB文件载入时,服务器会处在阻塞状态,直到载入工作完成。

Redis使用BGSAVE命令自动间隔保存。

Redis学习笔记(八) RDB持久化

1、RDB文件的创建与载入
Redis可以使用SAVE或BGSAVE命令创建RDB文件。
SAVE命令会阻塞服务器进程,直到RDB文件创建完毕,在服务器阻塞过程中服务器不能处理任何命令,所以此时客户端发送来的命令都会被拒绝。
BGSAVE命令会派生一个子线程,然后由子线程负责创建RDB文件,服务器进程(主进程)继续处理命令。
RDB文件的载入实在服务器启动时自动执行,所以Redis并没有专门载入RDB文件的命令,只要Redis服务器在启动时检测到RDB文件存在,它就会自动载入。
由于AOF文件的跟新频率通常比RDB文件更新频率高,所以如果服务器开启了AOF,那么服务器优先从AOF文件还原数据库,只有AOF关闭时,服务器才会使用RDB文件还原数据库。
BGSAVE命令执行时,Redis服务器处理SAVE、BGSAVE、BGREWRITEAOF命令方式会与平时不同。
1、SAVE命令会被服务器拒绝,服务器禁止SAVE、BGSAVE命令同时执行,是为了避免主线程与子线程同时执行rdbSave产生竞争条件。
2、BGSAVE命令同样也会被拒绝,因为两个BGSAVE命令也会产生竞争条件。
3、BGREWRITEAOF命令会被延迟到BGSAVE命令执行完毕后执行,如果 BGREWRITEAOF命令正在执行,那么客户端发送的BGSAVE命令会被服务器拒绝。
RDB文件载入时,服务器会处在阻塞状态,直到载入工作完成。
Redis使用BGSAVE命令自动间隔保存。

struct redisServer{
//记录了保存条件的数组
struct saveparam *saveparams;
//修改计数器
long long diry;
//上一次执行保存的时间
time_t lastsave;
}
save选项的保存条件:
struct saveparam{
//秒数
time_t seconds;
//修改次数
int changes;
}

代码100分

Redis的服务器周期性操作函数serverCron默认100毫秒执行一次,用于维护正在运行的服务器,他的一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足则执行BGSAVE命令。

 Redis学习笔记(八) RDB持久化

 

 

RDB文件结构

 Redis学习笔记(八) RDB持久化

 

 

 RDB文件中的数据库结构示例

 

Redis 标识时Redis数据库RDB文件
db_version 文件版本
selectdb 标识后面是查询的第几个数据库。
pairt 保存着该数据库的所有键值对以及过期时间
EOF 标识内容结束
check_sum 校验和,用来检测RDB文件是否正确有无损坏。

VALUE编码:
1、字符串对象
redis支持压缩存储,如果不压缩的情况下,存储len与字符串;如果压缩则结构如下:

Redis学习笔记(八) RDB持久化

 

 

 REDIS_RDB_ENC_LZF常量标志着字符串被LZF算法压缩,读入陈旭在碰到这个常量时会根据compressed_len(压缩后长度),orgin_len(原长度)和compressed_string (压缩后字符串)三个部分,对字符串进行解压缩。

2、列表对象

Redis学习笔记(八) RDB持久化

 

 

 list_length记录了列表长度。tiem每一项都是一个字符串,程序读入时按字符串对象读入。

3、集合对象 存储方式与列表对象相似。

4、哈希表对象

Redis学习笔记(八) RDB持久化

 

 

 其中key_value_pair结构中的键值对以键紧挨值的方式排列。

5、有序结合对象

 

 

 Redis学习笔记(八) RDB持久化

 

 

 


 

每天学一点,总会有收获。

 

说明:尊重作者知识产权,文中内容参考《Redis设计与实现》,仅在此做学习与大家分享。

 

Redis学习笔记(八) RDB持久化

 

 

 

 

 

Redis学习笔记(八) RDB持久化

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8412.html

(0)
上一篇 2023-02-28
下一篇 2023-02-28

相关推荐

  • Windows10远程桌面连接CentOS7「终于解决」

    Windows10远程桌面连接CentOS7「终于解决」Windows10远程桌面连接CentOS7 羽化半径 2019-05-23 10:10:37 5984 收藏 16 分类专栏: windows CentOS7 版权 开始前请确保你有能上网的主机两…

    2023-03-26
    101
  • 离线安装PostgreSQL11.6[通俗易懂]

    离线安装PostgreSQL11.6[通俗易懂]因为客户最近有一台CentOS7的虚拟机,但是没有联网,需要安装离线安装PostgreSQL 1、首先去官网下载离线安装包 https://www.postgresql.org/download/ 说

    2022-12-29
    107
  • rediscluster配置详解_redis集群配置

    rediscluster配置详解_redis集群配置[TOC] RedisCluster 集群快速入门备忘 PS : 该教程基于Redis5.0+ Redis cluster集群需要注意: 可以线性扩张到1000个节点 节点使用P2P而非Proxy方…

    2023-01-28
    114
  • 大数据存储技术基础知识_大数据存储的问题

    大数据存储技术基础知识_大数据存储的问题一、绪论 1.存储的本质 信息跨越空间的传递——通讯 信息跨越时间的传递——存储 通讯:利用具有跨越空间特性的物理现象 声音、光、电 存储:利用具有时间稳态的物理现象 物理稳态、磁稳态、半导体稳态 什

    2023-02-05
    108
  • Redis学习笔记记录[亲测有效]

    Redis学习笔记记录[亲测有效]基础篇 什么是Redis及快速理解Redis的使用 Redis解决的问题及Redis的特性 Redis的应用场景及正确安装与启动 Redis配置、启动、操作、关闭及版本选择 字符串使用与内部实现原理

    2023-02-02
    95
  • JDBC+C3P0+DBCP 基本使用[通俗易懂]

    JDBC+C3P0+DBCP 基本使用[通俗易懂]1.概述 这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置. …

    2022-12-20
    106
  • 浅谈高效使用MySQL「建议收藏」

    浅谈高效使用MySQL「建议收藏」MySQL是目前经常使用的数据库。当我们需要处理几千万几亿几十亿这样级别的数据的时候,MySQL的性能至关重要,特别对于大量并发的服务器,数据库操作往往成为整个服务器的性能瓶颈。下面我分享一下一些基…

    2023-01-28
    92
  • 使用Python创建自我意识的Tulpa

    使用Python创建自我意识的TulpaTulpa起源于西藏佛教,意为“创造的东西”,指通过冥想和意识投射创造出来的意识体。Tulpa会在人脑中形成一种自主思考与行动的“分身”,具有独立思考的能力,可以与创造它的人进行交流和互动。

    2024-01-16
    61

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注