5.2 Redis持久化之RDB

1.简介
(1).什么是RDB

  • RDB持久化是指在指定的时间间隔内,使用命令的方式将内存中的数据写入磁盘
  • RDB是默认的持久化方式,默认的文件名为dump.rdb。
  • RDB文件还是一个复制媒介,可以使用RDB实现主从复制

(2).恢复

  • 当Redis重新启动时,会从本地磁盘加载之前持久化的文件
  • 当恢复完成之后,再受理后续的请求操作

(3).触发机制

  • save(同步)
  • bgsave(异步)
  • 自动生成

2.save

  • 执行方式:客户端执行save命令,Redis将创建一个rdb文件
  • 同步:如果数据量较大,会阻塞Redis执行其它命令
  • 文件策略:如果存在老的rdb文件,将会用新文件替换老文件
  • 时间复杂度:save命令的时间复杂度为O(n)
    在这里插入图片描述

3.bgsave

  • 执行方式:客户端执行bgsave命令
  • 异步:Redis使用Linux的fork()函数生成一个Redis的子进程,由子进程去创建RDB文件,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上Redis内部所有的RDB操作都采用bgsave命令。
  • 文件策略:如果存在老的rdb文件,将会用新文件替换老文件
  • 时间复杂度:save命令的时间复杂度为O(n)
    在这里插入图片描述

4.自动生成
(1).频率

配置secondschanges
save9001
save30010
save6010000

配置从下往上看,如果Redis在60秒内改变了10000条数据,则通过bgsave生成一个rdb文件,以此类推。该方式的缺点在于无法控制生成rdb文件的频率。
一般在线上时会关闭该配置。

(2).配置

  • RDB文件名称

    dbfilename dump.rdb
    
  • RDB默认文件存储路径(一般选择一个较大的磁盘)

    dir ./
    
  • bgsave发生错误时是否停止写入

    stop-writes-on-bgsave-error yes
    
  • RDB文件是否采用压缩格式

    rdbcompression yes
    
  • 是否对RDB文件进行检验

    rdbchecksum yes
    

(3).触发机制-不容忽略的方式

  • 主从复制:在主从复制时,主会自动生成rdb文件
  • 重启:不需要清空内存的重启也会生成rdb文件

5.总结
(1).RDB总结

  • RDB是Redis内存到硬盘的快照,用于持久化
  • save通常会阻塞Redis
  • bgsave不会阻塞Redis,但是会fork新进程
  • save自动配置满足任一就会被执行
  • 有些触发机制不容忽视

(2).save和bgsave对比

命令savebgsave
IO类型同步异步
阻塞会(阻塞发生在fork阶段)
复杂度O(n)O(n)
优点不会消耗额外内存不阻塞客户端命令
缺点阻塞客户端命令需要fork,消耗内存资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值