美文网首页redis系列
redis系列(三):RDB持久化

redis系列(三):RDB持久化

作者: 范柏柏 | 来源:发表于2020-05-30 15:35 被阅读0次

redis是内存数据库,他将自己的数据库状态存储在内存里面,异常退出数据就丢了,所以一定要持久化。这一节主要讲RDB持久化。

首先RDB就是一个文件。他记录了某一个时间点,redis所有数据的快照。

可以手动生成RDB文件,也可以让服务器定期生成RDB文件。

手动生成RDB文件

两个命令:

  • SAVE
  • BGSAVE

如果想尝试,直接在命令行敲这两个单词就可以了。

区别:

  1. SAVE是阻塞的,在生成RDB文件的时候,redis阻塞一切指令,相当于停止服务,知道RDB文件生成结束。
  2. BGSAVE是不阻塞的,执行BGSAVE的时候,会在主进程基础上fork一个子进程,当RDB文件生成结束后,通知主进程。注意:fork操作会在创建子进程期间阻塞主进程。

持久化存储,redis不可能让用户手动执行吧。两个命令只是给用户留的口,redis内部肯定有自动执行的策略。

自动保存RDB文件

可以通过配置文件来配置

// 900秒内,对数据库进行了至少1次修改
save 900 1   
// 300秒内,对数据库进行了至少10次修改
save 300 10
// 60秒内,对数据库进行了至少1万次修改
save 60 10000

默认是这三个配置。

通过计数器,秒数,时间戳,循环判断这三个条件,满足其一,就执行一次RDB文件的创建。

当然了,还有两种必然会触发RDB持久化的场景

  1. 执行debug reload命令重新加载redis时,会触发save操作
  2. 执行shutdown命令时,如果没有开启AOF持久化,则自动执行BGAVE。

RDB文件是全量数据的快照。不是增量的。

redis通过RDB文件恢复数据

没有专门用来载入RDB文件的命令。只有在redis服务器启动的时候,检测到有RDB文件,就会自动执行RDB的载入。

但是redis会优先载入AOF文件。如果redis开启了AOF持久化,那直接执行载入AOF文件,RDB文件就废弃了。当redis没有开启AOF持久化功能的时候,服务器才会载入RDB文件。

RDB文件的结构

大写为常量,固定值。小写为变量。


RDB文件结构.png
  • REDIS
    就是字符串REDIS。一个固定值,表示开始。
  • db_version
    RDB文件的版本号。
  • databases
    数据库的所有库(0-15号)的所有key/value快照
  • EOF
    就是字符串EOF。一个固定值,表示结束。
  • check_sum
    校验和。是一个8字节的无符号整数。

databases部分

每个数据库的0-15号数据库,都是一个databases


0-15号数据库存储结构.png 每个号的数据库的存储结构.png key_value_pairs.png

TYPE是常量字符串,就是底层数据结构的type。
比如列表类型就是:REDIS_RDB_TYPE_LIST。

key就是数据库的key。
value根据类型,存储值。hash类型就是key/value挨着存。

先是0号数据库,0号数据库的所有key/value一个挨一个存好了。再1号数据库,1号数据库的所有key/value一个挨一个存好了。直到数据库存完了,后面紧挨着一个EOF + 校验和。

RDB 的优势和劣势

优势

  1. RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。

  2. 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。

  3. RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

劣势

RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据

相关文章

  • Redis-分布式缓存(一)

    零、本文纲要 一、单机Redis的问题二、Redis持久化(一)RDB持久化(二)AOF持久化(三)RDB与AOF...

  • Redis缓存持久化策略

    Redis RDB持久化原理 简介:rdb持久化方案配置讲解,redis的开发者是怎么实现rdb的 rdb持久化配...

  • Redis持久化

    Redis持久化方式有两种:RDB和AOF。 1 RDB持久化 RDB(Redis Database)持久化是把当...

  • redis-2

    redis-2 redis的持久化 Redis 提供了 RDB 和 AOF 两种持久化方式。 RDB RDB 是把...

  • 03-redis持久化

    Redis持久化 两种方式持久化: RDB持久化 - 全量 AOF持久化 - 增量 RDB持久化 RDB文件的生成...

  • Redis的持久化方式:RDB和AOF

    一,redis的持久化方式:RDB和AOF RDB,即Redis Database RDB持久化方式:在指定的时间...

  • 「高频面试题」Redis的持久化方式有哪些?

    RDB RDB(Redis DataBase)持久化是把当前Redis中全部数据生成快照保存在硬盘上。RDB持久化...

  • redis mongodb持久化的方式

    redis持久化方式(两种) RDB持久化 redis提供了RDB持久化的功能,这个功能可以将redis在内存中的...

  • 2020-02-21 记录redis(8)

    redis持久化,两种持久化方式: RDB方式 AOF方式 持久化的使用方式: RDB 优势: 1、redis的数...

  • Redis 持久化

    Redis 持久化 RDB RDB 持久化方式类似于快照,执行 SAVE BGSAVE命令时可以触发 RDB 持久...

网友评论

    本文标题:redis系列(三):RDB持久化

    本文链接:https://www.haomeiwen.com/subject/uvoczhtx.html