Redis-redis.conf配置文件中的RDB与AOF持久化方式的详解与区别

  1. RDB(Redis Database)
    RDB是Redis的默认持久化方式,它将内存中的数据以二进制格式写入磁盘,形成一个快照
    。RDB持久化有以下几个重要的配置选项:
  • save:指定了保存RDB的策略,默认的配置是每900秒(15分钟)至少有一个键发生变化时保存一次RDB文件。
  • save 900 1:表示在900秒内至少发生1个变化时进行保存。
  • save 300 10:表示在300秒内至少发生10个变化时进行保存。
  • save 60 10000:表示在60秒内至少发生10000个变化时进行保存。
  • dbfilename:指定保存RDB文件的文件名,默认是dump.rdb。
  • dir:指定RDB文件保存的目录,默认是Redis服务器所在的目录。
  1. AOF(Append Only File)
    AOF是Redis的另一种持久化方式,它以日志的形式记录每个写操作的命令,通过重新执行这些命令来恢复数据
    。AOF持久化有以下几个重要的配置选项:
  • appendonly:指定是否启用AOF,默认值为no。如果要启用AOF持久化,需要将该选项设置为yes。
  • appendfilename:指定保存AOF文件的文件名,默认是appendonly.aof。
  • appendfsync:指定AOF文件的同步策略,有以下三个选项:
    • always:每个写操作都立即同步到磁盘。这样能确保数据的完整性,但写入性能较低。
    • everysec:每秒同步一次,Redis默认的配置。在发生故障时可能会丢失1秒的数据。
    • no:完全依赖操作系统来同步,写入性能较高,但可能会丢失多秒的数据。
  • auto-aof-rewrite-percentage:设置AOF文件重写的触发百分比,默认为100。当AOF文件的大小超过了上一次重写时的大小的指定百分比时,Redis会自动触发AOF文件的重写。
  • auto-aof-rewrite-min-size:设置AOF文件重写的最小大小,默认为64MB。当AOF文件的大小超过了这个值时,Redis会自动触发AOF文件的重写。

区别:

  • RDB是以二进制格式持久化整个数据库,而AOF是记录每个写操作的日志。
  • RDB文件的恢复速度相对较快,但可能会丢失最后一次持久化后的数据 。AOF文件的恢复速度相对较慢,但能保证数据的完整性。
  • RDB文件的大小一般较小,适用于备份和恢复整个数据库 。AOF文件的大小一般较大,适用于持久化每个写操作。
  • AOF方式更加耗费硬盘空间和IO ,而RDB方式更加适用于节约空间和提高性能的场景。
  • 在默认配置 下,Redis同时使用RDB和AOF ,但在恢复的时候会优先使用AOF来进行数据重建。

持久化---RDB(Redis Database)

RDB:Redis Databases

1.什么是RDB

在指定时间间隔后,将内存中的数据集快照写入数据库 ;在恢复时候,直接读取快照文件,进行数据的恢复 ;

2.工作原理

在进行 RDB 的时候,redis 的主线程是不会做 io 操作的 ,主线程会 fork 一个子线程来完成该操作;

​ 1.Redis 调用forks。同时拥有父进程和子进程。

​ 2.子进程将数据集写入到一个临时 RDB 文件中。

​ 3.当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。
这种工作方式 使得 Redis 可以从写时复制(copy-on-write)机制中获益 (因为是使用子进程进行写操作,而父进程依然可以接收来自客户端的请求。)

①修改配置文件中,有关生成写入rdb文件的说明

②测试1:先删除rdb文件,再出发rdb文件的创建机制

保存一下配置文件的修改

save可以使内存中的数据,立刻持久化,并阻塞其他进程


重新生成rdb文件

③测试2:重启redis,内存中的数据,还在rdb中

④测试3:删除rdb文件,flushall后,自动生成rdb文件

3.触发机制

  1. save的规则满足的情况下,会自动触发rdb原则
  2. 执行flushall命令,也会触发我们的rdb原则
  3. 退出redis,也会自动产生rdb文件
4.save

使用 save 命令,会立刻对当前内存中的数据进行持久化 ,但是会阻塞,也就是不接受其他操作了;

由于 save 命令是同步命令,会占用Redis的主进程。若Redis数据非常多时,save命令执行速度会非常慢,阻塞所有客户端的请求。

5.flushall命令

flushall 命令也会触发持久化 ;

6.触发持久化规则

满足配置条件中的触发条件 ;

可以通过配置文件对 Redis 进行设置, 让它在" N 秒内数据集至少有 M 个改动"这一条件被满足时, 自动进行数据集保存操作。

7.bgsave

bgsave 是异步进行 ,进行持久化的时候 ,redis 还可以将继续响应客户端请求 ;

bgsave和save对比

命令 save bgsave
IO类型 同步 异步
阻塞? 是 是(阻塞发生在fock(),通常非常快)
复杂度 O(n) O(n)
优点 不会消耗额外的内存 不阻塞客户端命令
缺点 阻塞客户端命令 需要fock子进程,消耗内存

持久化AOF(Append Only File)

AOF几乎不使用,但是得理解原理

1.重启redis,自动生成aof文件
2.redis-check-aof

redis-check-aof:恢复原来的aof文件,但是会删除错误数据

破坏aof文件后,连接报错

修复aof文件:redis-check-aof --fix appendonly.aof

正常进入redis

3.优缺点
4.重写规则
5.扩展
相关推荐
IT大白鼠7 分钟前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
hweiyu0031 分钟前
Redis命令:HTTL
redis·缓存
EatFan1 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
小蒜学长1 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统
jinyishu_1 小时前
向量数据库入门:记录结构、索引、检索与选型
数据库
写后端的胖头鱼5 小时前
【高频面试题】FullText 全文索引(MySQL)
数据库·mysql·索引·全文索引
路远的数据库笔记5 小时前
SQL Server迁移国产数据库怎么做?九套口岸库零停机割接实战
数据库·经验分享·sqlserver·dba
樱花落木兰5 小时前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
kaiyou20266 小时前
用户研究岗秋招,统计分析能力怎么学习和证明?
数据库·python·学习
mjhcsp6 小时前
DeepSeek V4.1 Flash 批量处理效能实测
java·前端·数据库