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 慢。
相关推荐
数据皮皮侠1 天前
政府创新采购数据库(2016-2024)
大数据·数据库·人工智能·制造·微信开放平台
kkkkkkkkl241 天前
MySQL 深分页查询优化实践与经验总结
数据库·mysql
数据知道1 天前
MySQL业务数据量增长到单表成为瓶颈时,该如何做?
数据库·mysql·mysql优化
soft20015251 天前
深入理解 MySQL Buffer Pool 核心机制:初始化、free 链表与数据页流转
数据库·mysql·链表
晓13131 天前
SQL篇——【MySQL篇:运维】高可用架构搭建(主从、读写分离、分库分表)
android·数据库·mysql
JavaOpsPro1 天前
上云后mysql默认wait_timeout导致应用层很多连接不可用
数据库·mysql
管理大亨1 天前
Elasticsearch + Logstash + Filebeat + Kibana + Redis架构
redis·elasticsearch·架构
GEM的左耳返1 天前
互联网大厂Java求职面试题解析与实战指导:涵盖核心技术栈与业务场景
java·数据库·spring boot·安全·微服务·消息队列·面试题
越甲八千1 天前
ASGI和AWSIG区别
数据库·python·sqlite
数据库学啊1 天前
性价比高的车联网时序数据库供应商有哪些
数据库·时序数据库