【redis】redis RDB

发布于:2024-06-29 ⋅ 阅读:(10) ⋅ 点赞:(0)

1、概述

1.1定义

  • RDB (Redis Database) 是 Redis 的默认持久化机制,它能够在指定的时间间隔内将内存中的数据集快照写入磁盘。
  • RDB 持久化产生的文件是一个经过压缩的二进制文件,通过该文件可以还原生成 RDB 文件时的数据库状态。

1.2特点

  • 一次性全量备份:RDB 是 Redis 数据的完整备份,通常在一个单独的文件中,包含了某个时间点 Redis 的所有数据。
  • 数据紧凑:由于 RDB 文件是二进制文件,且采用了压缩技术,所以它的体积通常比 AOF 文件小得多。
  • 恢复速度快:由于 RDB 文件的读写效率很高,因此 Redis 重启时加载 RDB 文件的速度比加载 AOF 文件的速度要快很多。
  • 存储数据安全:RDB 持久化会将数据写入磁盘,因此即使 Redis 进程崩溃,也可以通过 RDB 文件进行数据恢复。

2、持久化

2.1过程

  • RDB持久化可以手动执行(使用SAVE命令)或由服务器定期执行(根据配置选项)。
  • 自动触发:通过在Redis的配置文件redis.conf中设置save参数值来开启RDB自动持久化。例如,save 900 1表示在900秒内如果至少有1个key的值变化,则生成RDB文件。
  • 手动触发
    • SAVE命令:阻塞服务器进程,直到RDB文件创建完毕。不推荐在生产环境中使用。
    • BGSAVE命令:在后台异步执行快照生成,不会阻塞服务器处理客户端请求。Redis内部几乎所有的RDB操作都采用BGSAVE命令。

2.2主要步骤

  • 触发:通过自动或手动的方式触发RDB持久化。
  • fork子进程:执行bgsave命令时,Redis父进程会fork出一个子进程。这个子进程拥有父进程内存数据的副本。
  • 生成RDB文件:子进程读取内存数据,将数据写入一个RDB临时文件中。这个过程对父进程是异步的,父进程可以继续处理其他客户端请求。
  • 写入变更数据:如果父进程在子进程生成RDB文件期间修改了数据,父进程会通过写时复制(COW)机制将这些变更数据复制到新的内存区域,并在RDB临时文件写入完成后,将这些变更数据也写入RDB临时文件中。
  • 替换旧文件:子进程完成RDB临时文件的写入后,会通知父进程。父进程会将RDB临时文件重命名为正式的RDB文件,并替换旧的RDB文件。至此,RDB持久化完成。

3、应用场景

  • 定期备份:由于 RDB 文件是 Redis 数据的完整备份,因此可以用于定期备份 Redis 数据,以防止数据丢失。
  • 数据迁移:当需要将 Redis 数据从一个实例迁移到另一个实例时,可以使用 RDB 文件作为数据迁移的媒介。
  • 快速恢复:在 Redis 服务器崩溃或数据丢失的情况下,可以通过加载 RDB 文件来快速恢复数据。


网站公告

今日签到

点亮在社区的每一天
去签到