学习Redis之前,我还是觉得我务必跟你说一声,也是在我文章之中说的很多的一句话,我想也会适用于学习Redis,那就是在接触文章里的Reids命令时,不用试图去记这些命令 ,用到时去看API帮助文档即可;会用了或者实践过了再去了解也不会迟。
上手Redis系列
上手Redis系列(一):超全String字符串类型详解
上手Redis系列(二):超全List列表类型详解(代码图文示例)
上手Redis系列(三):超全集合Set类型详解(代码图文示例)
上手Redis系列(四):超全哈希Hash类型详解(代码图文示例)
上手Redis系列(五):超全有序集合Zset类型详解
上手Redis系列(六):超全Geospatial特殊类型详解(地理位置)
上手Redis系列(七):超全HyperLogLog特殊类型详解
上手Redis系列(八):Bitmaps特殊类型详解
上手Redis系列(九):事务操作
进阶Redis系列(十):超全详解Redis持久化机制RDB
进阶Redis系列(十一):超全详解Redis持久化机制AOF
一、为什么reids要使用持久化
Redis 是基于内存的数据库,如果内存中的数据不保存到磁盘,那么一旦因进程退出就会造成数据丢失的问题。所以当下次重启还可以恢复数据,Redis 提供了持久化机制来确保数据不丢失。
如果有好奇的小伙伴想跑去尝试看看在Redis中存数据后是不是断电及失的,多半要失望了。
为啥?
不要问,因为我试过了数据还在!
重启过后数据依然在,是因为Redis中的持久化机制,redis默认开启 RDB(这个下面会详解讲,放心),重启的时候会将数据导入 .rdb 文件。当然配置了持久化机制 AOF(下面也会讲滴),也会产生相应文件,那么redis会选择将数据导入到这个文件。
二、Redis中的 RDB 持久化机制
2.1 什么是 RDB
RDB(Reids DataBase) 在指定时间内将内存中的数据集Snapshot快照(针对内存进行的快速读取技术)写入磁盘,恢复时将快照文件读到内存里。
在上面已经说过,RDB 保存的文件是 dump.rdb。
2.2 指定Snapshot触发规则
如果你只是只求理解Redis的 RDB 那么下面 2.2指定Snapshot触发规则的在修改redis.config文件如果你不操作,那么难免会枯燥,你可以选择跳过。(学你想学,保持对知识的热度很重要)
上面让我们知道了 RDB 是通过快照的方式来指定在时间间隔内持久化到dump.rdb的,但是不知道的是如何触发持久化的?
知识要知其然,也要知其所以然。
可以通过修改redis.conf来配置文件指定触发规则。
save s(秒) num(触发次数)
来解释一下图中第一段 save 900 1 ,900是秒,那么后面的 1 就是在900秒内修改1次key就会触发RDB机制。(900s秒换成分钟min就是15分钟内修改1次key就触发RDB机制)
后面第二、三段以此类推如此。
我们先把原有的注释来玩我们自己的!
把触发策略改成 120秒内修改6次key触发RDB。
改好之后保存!
然后来看一下默认中有的dump.rdb
把dump.rdb删除
可以看到已经用 rm -rf 删除了dump.rdb
然后我们在reids中设置6个参数。
再次查看会发现出现了dump.rdb文件。
我们可以来关闭redis进程看看,数据是否还在。
再次启用redis发现已经断开连接。
再次连接查看数据依然存在。
除了redis.config中的save触发RDB操作,其实shutdown本身也是会触发RDB机制的。
再次删除dump.rdb
添加值
shutdown后可以发现已经生成dump.rdb文件。
还有第三种触发RDB操作,就是使用 flushall
再次触发RDB操作,生成dump.rdb文件。
2.3 三种触发RDB机制
结合上面的测试,我们知道有以下三种触发RDB机制:
- save的规则满足条件会自动触发RDB机制
- shutdown退出redis,触发RDB机制,生成rdb文件。
- 使用flushdb命令触发RDB机制。
以上触发RDB机制,其实就是备份!
备份的形式就是会自动的生成一个dump.rdb文件
三、RDB文件恢复
rdb的文件恢复非常简单,只需要将rdb文件放在redis的启动目录即可,redis在启动的时候会自动检查dump.rdb 然后恢复其中的数据。
四、RDB优势和劣势
优势:
- RDB因为只有一个文件且内容紧凑,所以适合进行备份和灾难恢复。
- RDB文件需要保持整个数据集,所以适合大规模数据恢复。
- 恢复数据比AOP(AOP在系列十一详解)的速度快。
劣势:
- 需要时间间隔进程操作,一旦发送故障,redis意外宕机,可能会丢失数据。
- RDB每次保存的时候,fork()出的一个子进程会占用内容空间,所以会耗时。
五、最后
最后的最后,为了更好的阅读体验,我把想说的话都放在了下面,嘿嘿。
我是一颗剽悍的种子 把我会的,认真的分享 是我写博客一直不变的信条。
如果你能看到这篇博文,说明咱们还是很有缘的;希望能带给你一些许帮助,创作的不易, 把我文章的知识带走,你的三连留下,点赞,评论,关注,是我最大的动力。