当前位置: 首页 > news >正文

Redis 持久化个人总结

 

Redis持久化

  • RDB持久化

  • AOF持久化

  • 混合持久化

RDB

介绍

介绍:全称Redis Database file(Redis数据备份文件),又称Redis数据快照。

简单说就是把内存种的所有数据都记录到磁盘中,当Redis实例出故障重启后,从磁盘读取快照文件,恢复数据。

快照文件称 RDB文件,默认保存在当前运行目录。

    save #由Redis主进程来执行RDB,会阻塞其他命令bgsave #开启子进程执行RDB,避免主线程受到影响

如果主动停机,会执行一次RDB。

配置

Redis内部有触发RDB机制,可在redis.conf文件中找到,格式如下:

#900s内,如果至少有一个key被修改,则执行bgsave,如果是save "",则表示禁用RDB
save 900 1
​
save 300 10
save 60 10000

RDB的其他配置也可在redis.conf中配置:

#是否压缩,建议不开启,压缩会消耗cpu,磁盘不如cpu值钱
rdbcompression yes
​
#RDB文件名称
dbfilename dump. rdb
​
#文件保存的路径目录
dir ./

bgsave底层实现

bgsave开始时会fork(复制)主进程得到子进程,子进程共享进程的内存数据。

完成fork后读取内存数据并写入RDB文件。

fork采用的是cope-on-write计数:

  • 当主进程执行读操作时,访问共享内存。

  • 当主进程执行写操作时,会拷贝一份数据,执行写操作。

image-20240401204358161

总结
  1. RDB方式bgsave的基本流程:

    • fork主进程得到一个子进程,共享内存空间

    • 子进程读取内存数据并写入新的RDB文件

    • 用新RDB文件替换旧的RDB文件

  2. RDB会在什么时候执行?

    • 默认是服务停止时。

  3. save 60 100 代表什么含义?

    • 代表60秒内至少执行1000次修改触发RDB

  4. RDB的缺点?

    • RDB执行间隔时间长,两次RDB之间写入数据有丢失风险

    • fork子进程、压缩、写出RDB文件都比较耗时。

AOF持久化

介绍

AOF全称Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看作命令日志文件。

image-20240401205036490

配置

AOF默认关闭,需要修改redis.conf配置文件来开启AOF:

#是否开启AOF功能,默认是no
appendonly yes
#AOF文件的名称
appendfilename "appendonly.aof"

AOF的命令记录的频率可以通过redis.conf文件来配置:

#表示每执行一次写命令,立即记录到AOF文件
appendfsync always
​
#写命令执行完后先放AOF缓冲区,然后表示每隔一秒将缓冲区数据写到AOF文件(默认方案)
appendfsync everysec
​
#写命令执行完后放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no
配置项刷盘时机优点缺点
Always同步刷盘可靠性高,几乎不丢失数据性能影响大
everysec每秒刷盘性能适中最多丢失1秒数据
no操作系统控制性能适中可靠性较差,可能丢失大量数据

由于AOF是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只要最后一次有意义。

可以通过 bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到同样的效果。

image-20240401210210238

Redis也会在触发阙值时自动去重写AOF文件。阙值在redis.conf文件中配置:

#AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
​
#AOF文件体积最小多大才触发重写
auto-aof-rewrite-min-size 64mb

RDB和AOF对比

如果对数据安全性要求高的,在实际开发中往往会结合两种来使用。

RDBAOF
持久化方式定时对整个内存做快照记录每次执行的命令(类似日志)
数据完整性不完整,两次备份之间会丢失相对完整,取决于刷盘策略
文件大小会有压缩,文件体积小记录命令,文件体积很大
宕机恢复速度很快(直接使用快照)慢(AOF文件体积大)
数据恢复优先级低,因为数据完整性不如AOF高,因为数据完整性更高
系统资源占用高,大量CPU和内存消耗低,主要是磁盘IO资源,但AOF重写时会占用大量CPU和内存资源
使用场景可以容忍数分钟的数据丢失,追求更快的启动速度对数据安全性要求较高

混合持久化

RDB 优点是数据恢复速度快,但是快照的频率不好把握。频率太低,丢失的数据就会比较多,频率太高,就会影响性能。

AOF 优点是丢失数据少,但是数据恢复不快。

为了集成了两者的优点, Redis 4.0 提出了混合使用 AOF 日志和内存快照,也叫混合持久化,既保证了 Redis 重启速度,又降低数据丢失风险。

Redis 4.0 引入的混合持久化并不是将 RDB 和 AOF 直接混合在一起,而是通过将 RDB 和 AOF 持久化结合起来,利用它们各自的优势来提高数据持久化的可靠性和性能。

具体来说,混合持久化是指在 Redis 4.0 中可以同时启用 RDB 快照和 AOF 日志,而不是替代其中一个。在混合持久化模式下,Redis 会使用 RDB 快照来实现周期性的全量备份,同时使用 AOF 日志来记录每个写操作的指令,以确保数据的实时持久化和恢复。

在写操作的时候,Redis 会先将写操作记录到 AOF 日志中,然后根据配置的条件进行 AOF 日志的刷盘(fsync),以确保写操作的持久化。同时,Redis 也会在配置的条件下周期性地执行 RDB 快照,以创建全量备份。因此,在混合持久化模式下,写操作既会触发 AOF 日志的追加,也可能触发 RDB 快照的生成。

优点:

  • 混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF 的优点,有减低了大量数据丢失的风险。

缺点:

  • AOF 文件中添加了 RDB 格式的内容,使得 AOF 文件的可读性变得很差;
  • 兼容性差,如果开启混合持久化,那么此混合持久化 AOF 文件,就不能用在 Redis 4.0 之前版本了

相关文章:

  • 【算法】两数之和(暴力求解+哈希表)
  • 用tkinter来实现扫雷游戏
  • usb_camera传输视频流编码的问题记录!
  • Elasticsearch 聚合函数返回空数组|查询返回空内容 rs里有数据
  • 海康Ehome2.0与5.0设备接入EasyCVR视频汇聚平台时的配置区别
  • 穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地
  • webpack环境配置分类结合vue使用
  • 蓝桥杯算法题:最大比例
  • 金融企业区域集中库的设计构想和测试验证
  • kubeadm部署的k8s1.29集群证书更新
  • 微信小程序中实现埋点的方法
  • flink1.18源码本地调试环境
  • 如何操作RAID 0阵列的扩容?
  • MongoDB初探:安装与图形化界面保姆级使用指南
  • 面试算法-132-和至少为 K 的最短子数组
  • CentOS7 安装JDK
  • iOS小技巧之UIImagePickerController实现头像选择
  • Material Design
  • maven工程打包jar以及java jar命令的classpath使用
  • Phpstorm怎样批量删除空行?
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 关于springcloud Gateway中的限流
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 人脸识别最新开发经验demo
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 入门级的git使用指北
  • 事件委托的小应用
  • 云大使推广中的常见热门问题
  • Mac 上flink的安装与启动
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #宝哥教你#查看jquery绑定的事件函数
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (十)c52学习之旅-定时器实验
  • (十六)一篇文章学会Java的常用API
  • (十一)手动添加用户和文件的特殊权限
  • (四) Graphivz 颜色选择
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • **PHP二维数组遍历时同时赋值
  • .“空心村”成因分析及解决对策122344
  • .gitignore文件设置了忽略但不生效
  • .NET CORE Aws S3 使用
  • .NET Core WebAPI中封装Swagger配置
  • .Net Core与存储过程(一)
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 事件模型教程(二)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET6实现破解Modbus poll点表配置文件
  • .NetCore部署微服务(二)
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /bin/bash^M: bad interpreter: No such file or directory
  • @ModelAttribute使用详解