浅谈redis的RDB持久化机制

1、RDB简介

Redis有两种持久化形式,一种是RDB快照模式(snapshot),另一种是AOF(Append-Only-file)。
RDB是将当前的数据集快照写入磁盘, Redis 重启动时, 可以通过载入 RDB 文件来还原数据库的状态。假如Redis没有持久化机制,可不可以,可以!当成纯内存使用,禁止所有持久化机制,追求高性能。
RDB 功能最核心的是 rdbSaverdbLoad 两个函数, rdbSave用于生成 RDB 文件到磁盘, 而rdbLoad 则用于将 RDB 文件中的数据重新载入到内存中。
rdbsave将快照写入RDB文件的时候,如果文件已经存在,则新的RDB文件会将已有的文件覆盖。

2、如何触发

RDB是怎么工作的?只要安装好resdis可以了么?当然不是!!!

RDB有两种方式可以触发RDB持久化,这里说的RDB持久化,指的是一次将当前的数据集快照写入磁盘的操作。分别是通过执行命令手动触发通过配置redis.conf文件自动触发

2.1 手动触发

手动触发redis有两个指令,分别是savebgsave

  • save: 该线程会阻塞当前redis服务器,执行save指令期间,redis不能处理其他的命令,直到RDB持久化完成。如果RDB文件较大,会产生比较大的影响,生产上谨慎使用
  • bgsave:为了解决save命令存在的痛点,bgsave会异步执行RDB持久化操作,不会影响redis处理其他的请求。Redis服务器会通过fork操作来创建一个子进程,专门处理此次的RDB持久化操作,完成后自动结束。Redis只会在fork过程中发生阻塞,而且时间较短,当然,fork时间也会随着数据量变大而变长,需要占用的内存也会加倍。

savebgsave命令都会调用上面说的rdbsave方法,只是方式不一样。

2.2 自动触发

需要配置redis.conf文件:

save 900 1     # 如果900 秒内至少有 1 个 key 的值变化,则触发RDB
save 300 10   # 如果300 秒内至少有 10 个 key 的值变化,则触发RDB
save 60 10000    # 如果60 秒内至少有 10000 个 key 的值变化,则触发RDB

如何关闭自动触发?
只需要注释掉上面的代码,或者直接用空字符串即可。

save ""

如果使用命令行操作就是

redis-cli config set save " "

2.2.1 自动保存的原理

为什么配置了就可以了?底层的机制是什么?
redis有一个周期操作函数serverCron,默认是每100毫秒就会执行一次,只要服务器在运行,这个函数也就一直在工作,检查save设置的条件是否有被满足,这个是serverCron函数的其中一个功能,如果满足,就会执行bgsave。基本所有的RDB操作都是默认使用bgsave,而不是save

除了上面说的save参数之外,我们来看看其他的和RDB相关的配置

  • save 900 1
    • 配置触发RDB持久化的条件
  • stop-writes-on-bgsave-error yes
    • 默认是yes,这个配置意思是如果启动RDB持久化,那么如果后台保存数据失败,redis是否会停止接受数据。这蛮好的,能起到告警的作用,如果redis持久化有问题了,能够反映到redis本身的读写上来。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值