redis 持久化 ——RDB 柔情只为你懂 2022-04-11 04:00 184阅读 0赞 ### 文章目录 ### * RDB * * 关于 fork * dump.rdb 文件 * 如何触发 RDB 快照 * 如何恢复 * 优势 * 劣势 * 停掉 RDB -------------------- # RDB # `redis database` 的简写 ; 在指定时间间隔后,将内存中的数据集快照写入数据库 ;在恢复时候,直接读取快照文件,进行数据的恢复 ; 在进行 **`RDB`** 的时候,**`redis`** 的主线程是不会做 **`io`** 操作的,主线程会 **`fork`** 一个子线程来完成该操作; 子线程在操作的时候,会先将数据写进临时文件中,等到内存中所有的数据都写进临时文件中以后,才会进行文件的替换,用该临时文件替换掉上一次的持久化文件 ; 从子线程的工作方式,我们也可以看出,最后一次持久化操作以后的数据面临着丢失的风险 ; -------------------- ## 关于 fork ## `fork` 作用是复制,复制当前线程的一个副本,副本是什么概念,复制品的意思,也就是说,主线程的数据,都会被 `copy` 来,这样就导致一个问题,每次进行 `RDB` 的时候,其实内存中是有两份数据的,这个需要考虑到 ; -------------------- ## dump.rdb 文件 ## `RDB` 方式保存的文件是 `dump.rdb` 文件 ; > 在配置文件中进行配置,不再累赘,前一篇 `redis` 配置文件 的博客,已经讲了 -------------------- ## 如何触发 RDB 快照 ## 1. 使用 `save` 命令,会立刻对当前内存中的数据进行持久化 ,但是会阻塞,也就是不接受其他操作了; 2. `flushall` 命令也会触发持久化 ; 3. 满足配置条件中的触发条件 ; 4. `bgsave` 是异步进行,进行持久化的时候,`redis` 还可以将继续响应客户端请求 ; 5. 重新启动 `redis` ,也会触发,记进行加载持久化文件 ; 可以通过 `lastsave` 获取上一次 `save` 的时间 ; -------------------- ## 如何恢复 ## 将备份文件放在 `redis` 的安装目录,然后启动 `redis` 即可 ; -------------------- ## 优势 ## 1. 适合大规模文件的备份,速度比较快 ; 2. 对数据的完整性和一致性要求不高 3. 在备份的时候,是子线程在操作,不需要 `redis` 的主线程进行 `IO` 操作,不会影响性能; -------------------- ## 劣势 ## 1. fork 对内存占用 ; 2. 最后一次持久化以后的数据存在丢失的风险 ; -------------------- ## 停掉 RDB ## 在配置文件中,配置 `save ""`即可 ;
还没有评论,来说两句吧...