百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

不得不看!Redis 强化篇 —— 持久化 RDB 和 AOF

mhr18 2024-11-16 23:25 16 浏览 0 评论

Redis 持久化

redis 是内存数据库,如果不将内存中数据库保存到磁盘上,那么服务器一旦宕机,或者 redis 进程退出,不仅数据会被丢失,服务器中的数据库状态也会被丢失

因此 redis 提供了持久化的功能

redis 的持久化分为 RDB 和 AOF

RDB (Redis DatabBase)

在主从复制中,rdb文件都作为备用的,放在从机上面

在指定时间间隔内将内存中的数据集快照写入到磁盘中,这就是快照 snapshot ,恢复快照的时候,是把快照文件读入到内存中。

redis 通过 fork 的方式创建一个子进程来专门做持久化的动作,

  • 先将数据写入到一个临时文件中,待持久化过程结束,再用这个临时文件替换上一次的持久化好的文件

整个过程中,主进程是不进行任务 IO 操作的,这就保障了极高的性能

如果需要进行大规模的数据恢复,且对于数据的完整性要求不那么敏感和严格,选择 RDB 的持久化方式比 AOF 的持久化方式更优,更加高效。

RDB 虽然性能高,但是在 最后一次持久化后的数据可能会被丢失,redis 默认就是使用的 RDB 持久化方式,一般情况下也不需要修改

我们设置 60s 内若 有操作 redis 3 次,那就做一次持久化

dump.db 文件是生成在 dir 目录下的,我们这里的 dir 目录是 /root

进行上述操作之后,我们发现 /root 生成了 dump.rdb 文件 ,咱们将该文件删除掉,再尝试一次

持久化的触发机制

  • 按照 save 的规则满足的情况下,就会触发持久化,例如上述的 60s 操作 redis 3 次就会触发 1 次持久化
  • 执行 flushall 命令的时候,也会触发持久化,生成 dump.db 文件
  • 退出 redis 的时候, 也会触发持久化,生成 dump.db 文件

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

如何恢复持久化文件

1、只需要将 dump.db 文件放到 redis 的启动目录即可,redis 启动的时候会将该文件读入到内存中,进行数据恢复

2、查看 redis 的启动目录可以这样做

127.0.0.1:6379> config get dir
1) "dir"
2) "/root"

这一块的配置,我们基本上不需要修改太多,默认的配置基本就够用了

RDB 的优势

  • 适合大规模的数据恢复
  • 对数据的完整性要求不高

RDB 的劣势

  • 需要在一定的时间间隔进行操作,如果 redis 意外宕机,最后一次写入的数据就会丢失
  • fork 子进程的时候需要占用一定的空间

AOF 持久化方式

AOF 是什么?

将我们的写命令全部记录下来,恢复的时候,将文件中的记录全部执行一次

AOF 是 redis 的另外一种持久化方式,以日志的形式记录每一个写操作,将 redis 执行过的写操作全部记录下来,只允许追加文件,不允许改写文件

redis 启动的时候就会读取这个 aof 文件重建数据库,也就是说,redis 重启的时候,就会根据日志文件的内容将写指令按照写入顺序执行,完成数据恢复

aof 保存的是 appendonly.aof 文件

auto-aof-rewrite-min-size 64mb

当 aof 文件大于 64 mb 的时候,就会再创建一个子进程来写一个新的 aof 文件

关于 aof 的配置基本上其他的都是使用默认的配置即可,我们只需要把 aof 模式打开即可

appendonly yes

默认 appendonly 是不开启的,我们修改了配置之后,重启 redis-server 就会马上生效

重写规则说明

aof 默认是对文件无限追加,文件必然会越来越大

修改 redis.conf 为 aof 模式后,重启 redis-server 可以看到 appendonly.aof 文件

redis 客户端连接 server 进行操作 redis ,简单的设置几个值

查看 appendonly.aof 文件

appendonly.aof 文件里面存放的就是我们操作 redis 的写命令的记录

这个时候,我们认为的在 appendonly.aof 文件中修改一些值


启动 redis-server ,查看是否可以恢复数据

发现 redis-server 启动失败,是因为咱们的 appendonly.aof 文件被人为的修改过,此时咱们需要修复该文件,redis 有提供工具修改 aof 文件,redis-check-aof

使用指令:

redis-check-aof --fix appendonly.aof

修复 aof 文件后,咱们再次启动 redis-server 来回复磁盘数据,恢复成功,nice

aof 的优势和劣势

优势

  • 每一次操作 reids 都会被记录,文件的完整性好
  • 每秒同步一次,可能会丢失一秒的数据
  • 从不同步,这个效率是最高的

劣势

  • 相对于数据文件来说,aof 文件会远大于 rdb 文件,修复的速度也比 rdb 文件慢
  • aof 运行的效率比 rdb 慢,所以 redis 默认的配置是 rdb 持久化

小结

两种持久化方式简述

  • RDB 持久化的方式能够在指定的时间间隔内对数据进行快照存储
  • AOF 持久化的方式记录每次对服务器的写操作,当服务器重启或者宕机的时候,会重新执行这些记录里面的写操作命令来恢复数据,AOF 命令以 redis 协议追加保存每次写操作到文件末尾,redis 还能对 aof 文件进行后台重写,是的 AOF 文件的体积不至于过大
  • 如果需求是只做缓存,只期望服务器运行的时候数据存在,那么不用做持久化

两种持久化方式的开和不开

  • 可以同时开启两种持久化方式
    • 这种情况下,redis 重启会先载入 aof 文件来恢复数据,因为通常情况下 aof 文件保存的数据集比 rdb 的数据集要完整
    • rdb 数据集不是实时的,同时使用两种方式时,服务器重启有只会找 aof 文件,那么要不要只使用 aof 文件呢?
  • redis 的作者建议是不要只使用 aof 文件,因为 rdb 更加适合用于备份数据库,因为 aof 在不断的变化,不好备份,快速重启的时候,rdb 不会有 aof 可能潜在的 bug,留着 rdb 做一个兜底的机制

性能上的建议

对于 rdb 持久化

  • 由于 rdb 文件只用于备份数据,建议只在 slave 上面持久化 rdb 文件,15 分钟持久化一次就够了,也就是这一条指令 save 900 1
  • 如果打开 aof 持久化,好处就是在极端情况下丢失数据也不会超过 2s 的数据,启动脚本就简单的加载自己的 aof 文件即可,这样做也是有代价的 代价之一就是 这样做带来了持续的 IO 操作 代价之二就是 AOF 重写的最后将重写过程产生新数据写入到新文件造成的阻塞是不可避免的,只要硬盘许可,应该要尽量的减少 aof 重写的频率

对于 aof 持久化

  • aof 重写的基础大小值是 64 mb,我们可以设置成 5g 以上,默认超过原大小 100% 大小重写,这个参数可以设置成一个合理的参数
  • 如果不打开 aof 模式,仅仅靠主从复制实现高可用也是可以的,能够省掉一大笔 IO 消耗,也减少了重写带来系统的性能波动,这样做仍然是有代价的 代价之一就是 如果主备 redis 同时挂掉(例如断电),会丢失十几分钟的数据,启动脚本也要比较主备的 rdb 文件,载入较新的那个 rdb 文件。

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: