redis学习笔记(九)RDB


全称:Redis DB的简称

一、原理

RDB是一种持久化技术,可以把redis现有的缓存数据全量持久化成一个文件。

问题:
时点性问题:持久化肯定不是一瞬间完成的,数据量大的话持久几十分钟都很正常。那么问题来了,比如8点开始RDB,8点30分完成,那么这个RDB的文件到底是8点的,还是8点30分的?

回答:
分两种情况:
1.即是8点也是8点30,因为这30分钟阻塞了,不再对外提供服务(调用save就是这样,很少用这种方式)
2.是8点的(bqsave,异步储存)。原理是创建一个调用内核API:fork() 创建一个子线程副本,子线程异步写入RDB文件。

二、fork原理

fork创建的副本并不储存实际数据,只储存数据的指针,所以占用空间很小,并且很快就能创建出来。这种技术叫COW(copy-on-write,写时复制)。
实际操作中,更新主线程的数据并不会修改子线程的数据,这是如何实现的?
先看原理图:
fork
主线程更新数据后(a=3 -> a=8)并不会更新a=3的内存区域,而是开辟了一个新的a=8的内存区域,再把a指向这个a=8。原来的a=3还是被子线程引用。这就是fork的原理。

三、RDB触发方式

1.手动触发

save // 阻塞储存
bqsave // 异步储存

2.自动触发

save 900 1
save 300 10
save 60 1

900指900秒,1指操作数。意思是900秒内至少1个key发生变化,就触发异步储存。

四、RDB弊端

1.不支持拉链,只有dump.rdb(可以让运维解决,定时写一个文件出去,那就需要人力成本了)
2.因为时点性,丢失数据相对多一些,时点与时间之间窗口数据最容易丢失

如果有写错的地方,欢迎大家指正,感谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值