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 慢。
相关推荐
落笔画忧愁e18 分钟前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书
Σίσυφος190032 分钟前
halcon 条形码、二维码识别、opencv识别
前端·数据库
小刘|1 小时前
深入理解 SQL 注入漏洞及解决方案
数据库·sql
天上掉下来个程小白2 小时前
案例-14.文件上传-简介
数据库·spring boot·后端·mybatis·状态模式
哆木2 小时前
排查生产sql查询缓慢
数据库·sql·mysql
橘子师兄3 小时前
分页功能组件开发
数据库·python·django
book01213 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
纠结哥_Shrek3 小时前
Oracle和Mysql的区别
数据库·mysql·oracle
极客先躯3 小时前
说说高级java每日一道面试题-2025年2月13日-数据库篇-请说说 MySQL 数据库的锁 ?
java·数据库·mysql·数据库的锁·模式分·粒度分·属性分
做梦敲代码3 小时前
达梦统计信息
数据库·达梦数据库