Redis RDB 持久化

RDB 持久化 (Redis DataBase)

Redis 是内存数据库,如果不把内存中的数据库状态(所有非空数据库及其键值对)储存到硬盘中,当数据库进程退出,数据会消失。
在这里插入图片描述

RDB 文件的创建与载入

在这里插入图片描述
在这里插入图片描述
BGSAVE 使用 fork() 实现,fork()会因为要为子进程产生一份虚拟空间表而花费较长的时间。如果此时客户端请求数量非常大的话,会导致较多的写时拷贝操作。而如果使用vfork()实现,虽然不会产生虚拟空间表,但子进程和父进程共享地址空间,不能保证数据是同一时刻的。

BGSAVE 操作借用 copy on write 机制进行写时复制,父进程 fork 一个子进程,由子进程进行内存遍历将数据写入临时文件,父进程仍处理客户端请求,待子进程执行完毕,用临时文件替换之前的备份文件.RDB,因此无论RDB是否成功,dump.rdb 都是完整的。

BGSAVE 期间数据库发生的变化,不影响生成的RDB文件。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

自动间隔性保存:BGSAVE

在这里插入图片描述
save 选项的默认条件:

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RDB 文件结构

在这里插入图片描述
在这里插入图片描述
db_version 长度为4字节,它的值是一个字符串表示的整数,记录了RDB文件的版本号。比如0006代表文件的版本为第六版。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
TYPE 表示value的类型。
在这里插入图片描述
EXPIRETIME_MS 长度1字节,表示要读入的是一个以毫秒为单位的过期时间。
ms 8字节长,是一个以毫秒为单位的UNIX时间戳,表示过期时间

比如 value 为string类型,编码为 REDIS_ENCODING_RAW ,则存储结构:
在这里插入图片描述
在这里插入图片描述

重点回顾

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值