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 慢。
相关推荐
TOPGO智能2 分钟前
在腾讯CloudStudio上成功部署Moltbot接入飞书
数据库
云边有个稻草人3 分钟前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险
数据库·国产数据库·kingbasees·金仓数据库·关系数据库替换用金仓
星辰_mya4 分钟前
Es之只读
数据库
JFSJHFZJ6 分钟前
清理手机顽固缓存,轻松释放几GB空间
缓存·智能手机
Tangcan-9 分钟前
【Redis】通用命令 1
数据库·redis·缓存
MSTcheng.14 分钟前
【C++】C++异常
java·数据库·c++·异常
czlczl2002092516 分钟前
缓存穿透问题与解决方案
缓存·mybatis
草莓熊Lotso1 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
大模型玩家七七1 小时前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
岳麓丹枫0012 小时前
PostgreSQL 中 pg_wal 目录里的 .ready .done .history 文件的生命周期
数据库·postgresql