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

【redis】AOF日志:宕机了,Redis如何避免数据丢失

专题3-AOF日志:宕机了,Redis如何避免数据丢失

因为redis的数据是存在内存中的,一旦服务器宕机,内存中的数据会全部丢失。

AOF:redis先执行命令,把数据写入内存,然后才记录日志。

AOF优点;在命令执行后记录日志,所以不会阻塞当前的写操作。

AOF缺点:如果刚执行完一个命令,还没有来得及记录日志就宕机了,那么这个命令和相应的数据就有丢失的风险。 其次。虽然避免了当前命令的阻塞,但是可能会给下一个操作带来阻塞的风险。(因为AOF日志也是在主线程中执行,如果把日志写入磁盘时,磁盘写压力大,就会导致写盘很慢,进而后续的操作就无法执行)

为了解决AOF存在的问题,有三种写回策略

Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘;-?影响主线程性能

Everysec,每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘; -》可能会丢失上一秒的数据

No,操作系统控制的写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。 -》可能导致数据丢失

AOF重写机制

为了防止AOF文件过大的性能问题。

为什么会有性能问题?

  1. 文件系统的限制,无法保存过大的文件
  2. 如果文件过大,往里面的追加记录,效率会变低
  3. 如果发生宕机,AOF中的命令要被一个个重新执行,如果日志文件过大,整个恢复过程非常缓慢

AOF重写机制

可以减少文件大小,因为AOF文件会记录每一行的数据,而AOF重写只会记录最新的数据。

重写过程:

一个拷贝,两处日志

一个拷贝:

每次重写时,主线程fork后台的bgrewriteaof子线程,并且把主线程内存拷贝一份给bgrewrieaof子线程,然后bgrewrieaof子线程在不影响主线程的状况下,逐一把拷贝的数据携程操作。

两处日志:

第一处日志是正在使用的AOF日志。

第二处日志是AOF重写日志。

总结来说,每次 AOF 重写时,Redis 会先执行一个内存拷贝,用于重写;然后,使用两个日志保证在重写过程中,新写入的数据不会丢失。而且,因为 Redis 采用额外的线程进行数据重写,所以,这个过程并不会阻塞主线程。

http://www.lryc.cn/news/45150.html

相关文章:

  • 第三章Vue中的Ajax
  • 在 Python3 中使用 JSON
  • 图神经网络GNN介绍
  • 【面试】TCP、UDP、Socket、HTTP网络编程面试题
  • Python语言的文件读写
  • 面向对象 ( 上 )
  • Node.js学习笔记——会话控制
  • tsconfig.json参数详解
  • Pyecharts Geo绘制可视化地图并展示坐标位置
  • 什么是Hbuilder?--前端工具IDE
  • 07-centos-更改数据源、打补丁、查看内核
  • flac格式如何转mp3,3种简单方法值得收藏
  • 停车位 蓝桥杯模拟
  • ftrace使用实战
  • 【C#进阶】C# 不安全代码
  • Docker安装部署ElasticSearch
  • 【新2023Q2模拟题JAVA】华为OD机试 - 快递业务站
  • OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换
  • 线段树合并
  • 研发效能 | DevOps如何改变游戏公司工作方式?
  • Mongo聚合和Springboot整合Mongo聚合
  • 第06章_索引的数据结构
  • 不确定的市场,确定的增长,海尔智家2022全球再逆增
  • 测试老鸟手把手教你python接口自动化测试项目实战演示
  • 一起来学5G终端射频标准(Coherent UL-MIMO测试要求)
  • 计算广告(五)
  • 排序输入的高效霍夫曼编码 | 贪心算法 3
  • 奇异值分解(SVD)和图像压缩
  • Java如何从yml文件获取对象
  • vue使用tinymce实现富文本编辑器