本文主要是介绍Redis 底层原理:持久化机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
持久化
虽然 Redis 是一个内存数据库,但它支持 RDB 和 AOF 两种持久化机制,将数据写入磁盘。这可以有效避免进程退出造成的数据丢失问题,并在重启时利用之前持久化的文件实现数据恢复。
RDB
RDB 持久化是将当前进程数据生成快照并保存到硬盘的过程。所谓内存快照,就是指内存中数据在某一时刻的状态记录。这类似于拍照,一张照片可以完整记录朋友某一瞬间的形象。RDB 就是 Redis DataBase 的缩写。
给哪些内存数据做快照?
Redis 的数据都在内存中,为了保证所有数据的可靠性,它执行的是全量快照,即将内存中的所有数据都记录到磁盘中。然而,RDB 文件越大,写入磁盘的数据量越大,时间开销也越大。
RDB 文件的生成是否会阻塞主线程
Redis 提供了两个手动命令来生成 RDB 文件,分别是 save
和 bgsave
。
save
:在主线程中执行,会导致阻塞;对于内存较大的实例会造成长时间阻塞,线上环境不建议使用。bgsave
:创建一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置。
除了手动触发,Redis 还存在自动触发 RDB 的持久化机制,例如以下场景:
- 使用
save
相关配置,如 “save m n”。表示 m 秒内数据集存在 n 次修改时,自动触发bgsave
。
- 如果从节点执行全量复制操作,主节点自动执行
bgsave
生成 RDB 文件并发送给从节点。 - 执行
debug reload
命令重新加载 Redis 时,也会自动触发save
操作。
- 默认情况下执行
shutdown
命令时,如果没有开启 AOF 持久化功能则自动执行bgsave
。
这篇关于Redis 底层原理:持久化机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!