Tianyi's Blog Tianyi's Blog
首页
  • 计算机网络
  • 操作系统
  • 计算机科学
  • Nginx
  • Vue框架
  • 环境配置
  • Java
  • JVM
  • Spring框架
  • Redis
  • MySQL
  • RabbitMQ
  • Kafka
  • Mirror Sites
  • Dev Tools
  • Docker
  • Jenkins
  • Scripts
  • Windows
  • 科学上网
  • 旅行
  • 网站日记
  • 软件
  • 电子产品
  • 杂野
  • 分类
  • 友情链接
GitHub (opens new window)

Tianyi

一直向前,永不停止
首页
  • 计算机网络
  • 操作系统
  • 计算机科学
  • Nginx
  • Vue框架
  • 环境配置
  • Java
  • JVM
  • Spring框架
  • Redis
  • MySQL
  • RabbitMQ
  • Kafka
  • Mirror Sites
  • Dev Tools
  • Docker
  • Jenkins
  • Scripts
  • Windows
  • 科学上网
  • 旅行
  • 网站日记
  • 软件
  • 电子产品
  • 杂野
  • 分类
  • 友情链接
GitHub (opens new window)
  • Java

  • Golang

  • JVM的奇妙世界

  • Spring

  • Spring增强封装

  • Redis

    • Redis迭代演化
    • Redis安装配置
    • Redis数据结构
    • Spring集成Redis组件
    • Spring Cache
    • Redis持久化
      • Bloom Filter
      • Cluster-主从模式
      • Cluster-Sentinel
      • Cluster-三主三从
      • Redis理论知识
    • MySQL

    • RabbitMQ

    • Kafka

    • 分享

    • 后端
    • Redis
    tianyi
    2024-03-04
    目录

    Redis持久化

    # 持久化

    Redis支持异步将内存中的数据写入到硬盘上,同时不影响继续服务

    Redis持久化机制目前以后3种,分别为:

    1>快照方式(RDB, Redis DataBase)

    2>文件追加方式(AOF, Append Only File)

    3>混合持久化方式(Redis4版本之后)

    # RDB

    第一种快照方式就是 Redis DataBase来存储数据,

    Snapshotting(快照)默认方式,将内存数据中以快照的方式写入到二进制文件中,默认为dump.rdb。触发RDB持久化过程分手动触发与自动触发。

    1. Redis 主线程:主线程负责处理客户端发送的命令请求,执行数据操作,处理持久化,以及其他与 Redis 服务器相关的任务。主线程不会因为执行持久化操作而自行阻塞,因为 Redis 使用了异步的持久化机制来确保主线程的高性能和可用性。
    2. BGSAVE 执行时机:BGSAVE 操作的执行时机通常是在满足一定条件下触发的,例如当服务器的内存使用量达到一定阈值,或者根据配置文件中设置的自动持久化策略。当满足了执行条件后,Redis 会自动触发 BGSAVE 操作。
    3. BGSAVE 子线程:当执行 BGSAVE 操作时,Redis 会创建一个子进程来执行持久化操作。这个子进程会复制主进程的内存数据,并在内存中进行持久化操作,然后将持久化后的数据写入到磁盘上的持久化文件中。完成持久化操作后,子进程会自行销毁,不会影响主线程的正常运行。
    4. 内存数据的持久化:在 BGSAVE 操作中,子进程会将主线程的内存数据复制一份,并在内存中进行持久化操作,然后将持久化后的数据写入到磁盘上的持久化文件中。这样可以确保在持久化操作期间,主线程仍然可以继续处理客户端请求,保持高性能和可用性。

    # AOF

    第二种方式AOF, Append Only File

    可以将 AOF 持久化方式理解为备份数据和还原数据的过程:

    1. 写操作(备份数据): 当客户端对 Redis 执行写操作时,例如设置键值对、删除键等,Redis 将这些写操作以追加的方式记录到 AOF 文件中。这个过程可以看作是备份数据的过程,将内存中的数据持久化到磁盘上的 AOF 文件中。
    2. 读操作(还原数据): 当 Redis 服务器启动时,或者执行 BGREWRITEAOF 命令时,Redis 会读取 AOF 文件,并逐行执行其中的命令来还原数据。这个过程可以看作是从 AOF 文件中读取数据,并将其加载到内存中,从而恢复数据到 Redis 数据库中。

    对 AOF 的理解

    • 写操作:AOF(Append Only File)是 Redis 的一种持久化方式。它将客户端的写操作以追加的方式记录到一个文本文件中。
    • 读操作:redis 服务器启动的时候,会读取 AOF文件到内存中,并逐行执行其中的 redis 命令来还原数据
    • 优势
      • 对 CPU 和内存友好,相较于 RDB,不需要那么多的额外性能来执行持久化操作
      • 定期记录客户端的写操作到文本文件中(不是每次都写到磁盘上,而是有一个缓冲区),确保数据的完整性和一致性
    • 劣势
      • AOF 文件大小通常比较大。
      • 可能存在一些冗余操作,导致在数据恢复时可能较慢。
      • 【优化冗余】AOF 文件重写(AOF rewrite):定期对 AOF 文件进行重写,以减少文件的大小和冗余操作,提高数据恢复的运行效率。

    # RDB+AOF

    Redis 4.0 之后推出的 RDB-AOF 混合持久化模式,其作为默认配置来使用。

    1. 全量备份(RDB): 当执行备份操作时,Redis 首先会将当前所有的数据以全量备份的方式保存到 RDB 文件中。这个全量备份包含了当前数据的完整快照,可以用于在 Redis 重启时快速恢复数据。
    2. 增量备份(AOF): 紧接着,Redis 会将后续的客户端写操作以增量备份的方式记录在 AOF 文件中。这个增量备份记录了对数据的修改操作,可以保证即使在 Redis 重启时发生故障,也能够恢复到最后一次持久化的状态。
    3. 恢复过程: 在 Redis 重启时,先使用 RDB 文件进行快速恢复数据,然后再重新执行 AOF 文件中记录的操作命令,来完成数据的完整恢复。这样一来,既能够保证 Redis 重启的速度,又能够降低数据丢失的风险。

    混合持久化模式结合了 RDB 和 AOF 的优点,为 Redis 提供了更为可靠的数据持久化和恢复机制。这种模式在实际应用中被广泛采用,以确保数据的安全和可靠性。

    讲了这么多,但最终在生产条件下,推荐的使用方式是混合持久化模式,也就是 Redis 4.0 版本之后提供的默认持久化方式

    完善页面 (opens new window)
    Spring Cache
    Bloom Filter

    ← Spring Cache Bloom Filter→

    最近更新
    01
    JDK
    02-23
    02
    BadTasteCode && 优化
    09-11
    03
    Gradle 实践操作指南及最佳实践
    09-11
    更多文章>
    Theme by Vdoing | Copyright © 2021-2025 Tandy | 粤ICP备2023113440号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式