栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis学习笔记(九)RDB

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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,写时复制)。
实际操作中,更新主线程的数据并不会修改子线程的数据,这是如何实现的?
先看原理图:

主线程更新数据后(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.因为时点性,丢失数据相对多一些,时点与时间之间窗口数据最容易丢失

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号