Redis及其两种持久化技术详解

第一部分:什么是 Redis?(核心概念)

简单来说,Redis 就是一个运行在内存(RAM)里的超快数据库。

1. 为什么它快?

想象一下你正在考试:

  • 内存 (Redis) :就像你的草稿纸。你写字极其快,随手就能改,存取数据也就是一瞬间的事。
  • 硬盘 (MySQL/传统库) :就像你的档案柜。你要存数据,得先站起来,走到柜子前,拉开抽屉,找到文件夹,写进去。这就慢多了。
2. 致命弱点

草稿纸(内存)有个大问题: 一旦停电(或者你把草稿纸扔了),上面的数据瞬间全没了!

3. 什么是持久化?

为了解决"停电就丢数据"的问题,我们需要定期把"草稿纸"上的内容,誊写到"档案柜"(硬盘)里去。
这个"从内存同步到硬盘"的过程,就叫持久化。


第二部分:Redis 的两种持久化武器

Redis 提供了两种截然不同的"誊写"方式:RDBAOF

1. RDB (Redis Database) ------ "照相机"模式

RDB方式的持久化是通过快照(snapshotting)完成的

【通俗理解】

RDB 就像是给数据库 "拍照片"

比如,你规定:每隔 5 分钟,就给整个数据库的数据拍一张快照,存成一个文件(dump.rdb)。

  • 工作方式:不管中间发生了什么,我只记录"这一刻"数据的最终状态。
  • 触发条件(配置文件中的 save)
  • save 900 1:如果 15 分钟内,至少有 1 个数据变了,我就拍张照。
  • save 60 10000:如果 1 分钟内,居然有 10000 个数据变了(说明数据变动极其频繁),我立刻拍张照。

【优缺点分析】

  • 优点

    • 恢复快:Redis 重启时,只要读取这张照片,数据一下子就全回来了。
    • 文件小:因为是压缩过的二进制文件。
  • 缺点(致命)

    • 容易丢数据 :假设你设置每 5 分钟拍一次照。如果你在第 4 分钟的时候服务器挂了,那么这 4 分钟内所有的新数据都丢失了(因为还没来得及拍照)。
2. AOF (Append Only File) ------ "记日记"模式

每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件

【通俗理解】

AOF 就像是 "记流水账""写日记"

Redis 会把你做的每一个操作都记录下来:

  • "如果你执行 set name zhangsan,Redis 就在 AOF 文件里写一行:'他把 name 设为了 zhangsan'。"
  • "如果你执行 del name,Redis 又写一行:'他删除了 name'。"

【工作方式】

当你重启 Redis 时,它没有"照片",但它有这本"日记"。它会把日记里的操作从头到尾重新执行一遍,这样数据就恢复了。

【优缺点分析】

  • 优点

    • 数据安全 :通常配置为每秒记录一次(appendfsync everysec),就算挂了,最多也就丢 1 秒的数据。
  • 缺点

    • 文件大:日记会越来越厚。
    • 恢复慢:重启时,Redis 要把这本厚厚的日记从头读到尾,重新执行几百万条命令,速度比 RDB 慢很多。

第三部分:图解对比与总结(面试必看)

特性 RDB (快照/照相) AOF (日志/记账)
核心原理 定时将内存数据整体存盘 记录每一条写操作命令
数据安全性 。可能会丢失最后一次快照后的数据 。最多丢失 1 秒数据 (默认配置下)
文件大小 小 (二进制压缩) 大 (纯文本记录)
恢复速度 (直接加载数据) (需要回放命令)
默认开启 否 (需要 appendonly yes)

第四部分:实际应用中的建议

如果数据很重要以至于无法承受任何损失,则可以考虑使用AOF

在真实的生产环境(工作)中,我们通常怎么做?

  1. 混合使用(推荐)
  • 同时开启 RDB 和 AOF
  • 平时重启时,Redis 会优先用 AOF 来恢复数据(因为它数据更全)。
  • RDB 作为一个"兜底"的备份,比如每小时备份一次 RDB 文件发给运维存起来,万一 AOF 文件坏了,还能用 RDB 救急。
  1. Redis 4.0+ 的混合持久化
  • 现在的 Redis 有个黑科技:AOF 文件的前半段是 RDB 格式,后半段是 AOF 增量格式
  • 这完美结合了 RDB 的加载速度快 和 AOF 的数据不丢失

总结教学

  • Redis 是为了而生的内存数据库。
  • 持久化 是为了防止断电丢数据
  • RDB每隔一段时间存一份全量备份(快,但有丢失风险)。
  • AOF每秒记录一次操作日志(安全,但文件大恢复慢)。
相关推荐
小吴编程之路7 小时前
MySQL 索引核心特性深度解析:从底层原理到实操应用
数据库·mysql
~莫子7 小时前
MySQL集群技术
数据库·mysql
凤山老林7 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
就不掉头发8 小时前
Linux与数据库进阶
数据库
与衫8 小时前
Gudu SQL Omni 技术深度解析
数据库·sql
咖啡の猫8 小时前
Redis桌面客户端
数据库·redis·缓存
oradh8 小时前
Oracle 11g数据库软件和数据库静默安装
数据库·oracle
what丶k8 小时前
如何保证 Redis 与 MySQL 数据一致性?后端必备实践指南
数据库·redis·mysql
_半夏曲8 小时前
PostgreSQL 13、14、15 区别
数据库·postgresql
把你毕设抢过来8 小时前
基于Spring Boot的社区智慧养老监护管理平台(源码+文档)
数据库·spring boot·后端