05. Redis 持久化

文章目录

  • [Redis 持久化](#Redis 持久化)
    • [RDB(Redis Database)](#RDB(Redis Database))
      • [什么是 RDB?](#什么是 RDB?)
      • 测试
      • 触发机制
      • [如何恢复 RDB 文件](#如何恢复 RDB 文件)
      • [RDB 优缺点](#RDB 优缺点)
    • [AOF(append only file)](#AOF(append only file))
      • [什么是 AOF?](#什么是 AOF?)
      • [修复 aof 文件(redis-check-aof)](#修复 aof 文件(redis-check-aof))
      • 重写机制
      • [AOF 的优点和缺点](#AOF 的优点和缺点)

Redis 持久化

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失,所以 Redis 提供了持久化功能。

RDB(Redis Database)

什么是 RDB?

在指定的时间间隔内,将内存中的数据集快照写入磁盘,也就是 Snapshot 快照,它恢复时是将快照文件直接读到内存里。

  • Redis 会单独创建(fork)一个子进程来进行持久化,会现将数据写入到一个临时文件中,待持久化过程结束,再用这个临时文件替换上次持久化好的文件。
  • 整个过程,主进程是不进行任何 IO 操作的,这就确保了极高的性能。
  • 如果需要进行大规模的数据恢复,且对于数据恢复的完整性不是非常敏感,那 RDB 方式要比 AOF 模式更加的高效。
  • RDB 模式的缺点是,最后一次持久化的数据可能会丢失(最后一次持久化的时候宕机了)。
  • 默认就是 RDB 模式。
  • RDB 保存的文件是 dump.rdb。

测试

测试,60s 内修改了 5 次 key,就会触发 RDB 操作。

修改完配置文件,调用 save 命令保存即可。

bash 复制代码
127.0.0.1:6379> save
OK

触发机制

  • save 命令的规则满足的情况下,会自动生成 RDB 文件;
  • 执行 flushall 命令,也会产生 RDB 文件;
  • 退出 Redis,也会生成 RDB 文件。

备份就会自动生成一个 dump.rdb 文件。

如何恢复 RDB 文件

只需将 RDB 文件放在 Redis 的启动文件目录下,Redis 启动会自动检查 dump.rdb 并恢复其中的数据。

查看需要存在的位置:

bash 复制代码
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/redis-stable/src" # 如果在这个目录下存在 dump.rdb 文件,Redis 启动就会恢复其中的数据

RDB 优缺点

优点:

  • 适合大规模的数据备份和恢复;
  • 如果对数据的完整性要求不高,就可以使用 RDB。

缺点:

  • 需要一定的时间间隔进行操作,如果 Redis 意外宕机了,这个最后一次修改的数据就没了;
  • fork 进程的时候,会占用一定的内存空间!

AOF(append only file)

什么是 AOF?

将我们的所有命令都记录下来,好比一个 history,恢复的时候把这个文件里面的命令重新执行一遍。

  • AOF 保存的是 appendonly.aof 文件。
  • AOF 默认不开启,需要手动进行配置。
  • 配置完成后,重启就会生效,就会生成 appendonly.aof。

修复 aof 文件(redis-check-aof)

如果这个 aof 文件有错误,这时候启动 redis 会报错,需要修复这个 aof 文件。Redis 提供了修复工具:redis-check-aof。

bash 复制代码
./redis-check-aof --fix appendonly.aof

重写机制

如果 AOF 文件大于 64m,Redis 就会 fork 一个子进程对我们的 AOF 文件进行重写。

AOF 的优点和缺点

优点:

  • 每一次修改都同步,文件完整性更高;
  • 默认每秒同步一次,可能丢失一秒的数据。

缺点:

  • 相对于数据文件来说,AOF 远大于 RDB,修复的速度也比 RDB 慢;
  • AOF 是一个读写操作,所以运行效率要比 RDB 慢。
相关推荐
爱可生开源社区20 小时前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1771 天前
《从零搭建NestJS项目》
数据库·typescript
加号32 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏2 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐2 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再2 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest2 天前
数据库SQL学习
数据库·sql
jnrjian2 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle
十月南城2 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
Henry Zhu1232 天前
数据库:并发控制基本概念
服务器·数据库