热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RedisRDB与AOF

原标题:RedisRDB与AOF参考书籍《Redis设计与实现》一丶为什

原标题:Redis RDB 与AOF

参考书籍《Redis设计与实现》

一丶为什么redis需要持久化

redis 作为一个内存数据库,如果不想办法将存储在内存中的数据,保存到磁盘中,那么一旦服务www.yii666.com器进程退出,那么redis数据库中的数据就将丢失。

二丶RDB

redis 提供RDB持久化功能,可以将数据库中的数据保存到磁盘中,避免数据意外丢失。Redis RDB 是将一个时间点的数据库状态保存到RDB文件中,RDB文件时一个经过压缩的二进制文件,通过该文件可以还原申生成RDB时的数据库状态。

1.SAVE与BGSAVE

SAVE和BGSAVE 命令都能生成RDB文件


  • SAVE命令会阻塞redis服务器进程,直到SAVE命令执行完为止,在服务器进程阻塞的期间,服务器无法处理任何命令请求

  • BGSAVE会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程可以继续处理请求命令

Redis 服务在启动的时候会检测RDB文件的存在,并自动载入RDB文件。由于AOF文件更新的频率比RDB高(频率高意味着数据全),所以如果同时具备AOF 和RDB文件,redis服务器会选择AOF文件进行恢复。

BGREWRITEAOF 可以触发AOF持久化,但是不允许和BGSAVE一起执行(因为一起执行意味着大量的磁盘写入操作)

2.RDB自动间隔保存

redis 允许用户通过配置save选项,让服务器每隔一段时间自动执行一次BGSAVE命令。如

save 900 1
save 300 10
save 60 1000

这个配置意味着,如果900秒内对数据库进行至少一次修改,300秒内对数据库至少由十次修改,60秒内有1000次修改,那么redis服务器将自文章来源地址19008.html动进行BGSAVE命令的执行。

为了实现这个功能redis服务器会记录两个内容:dirty(距离上一次成功执行save 或者bgsave 数据库进行了多少次修改)和 lastsave (时间戳,记录上一次执行save 或者 bgsave 的时间)。redis 周期性操作函数serverCron每隔100毫秒执行一次,会根据dirtylastsave是否满足 save 900 1等配置的要求,如果满足那么将执行BGSAVE

三丶AOF

除了RDB之外,redis 还有AOF(append only file)持久化的功能,与RDB持久化通过将数据库数据保存到文件中不同,AOF 持久化时通过保存redis服务器执行的修改操作命令来实现的。如

set msg "hello"

对于这条命令,RDB记录的是msg 键和对应的值,但是AOF记录的是set msg "hello"这条命令。AOF持久化可以使用BGREWRITEAOF触发

AOF可以分为如下流程

image-20230102182436931

1.命令追加

服务器在执行完一个写明了后,会以协议格式将被执行的命令追加到redis服务器中的aof_buf末尾

2.AOF 文件写入和同步

redis每次结束一个事件循环之前都会调用flushAppendOnlyFile来判断是否需要将aof_buf里的内容写入到AOF文件中。re文章来源站点https://www.yii666.com/dis服务器配置的appendfsync 设置可以控制aof 文件写入的时机:


  • always

    将aof缓冲区的所有内容写入并且同步到aof文件

    选择此配置,意味着每次都需要将命令写回磁盘,安全性最高,但是会导致效率很低


  • everysec

    每秒写入aof缓冲区中的内容,并同步aof文件(同步操作由另外一个线程专门进行)

    选择此配置,意味着每秒写回磁盘,最多丢失一秒的数据


  • no

    将aof缓冲区中的内容写入到AOF文件但是不同步,何时同步由操作系统决定

    此配置不会将命令马上写回磁盘,效率高,但是不安全


为了提高文件的写入效率,在现代操作系统中,用户调用write函数,将一些数据写入到文件的时候,操作系统通常会将期望写入的数据保存到一个内存缓冲区中,等缓冲区满或者超过一段事件后,才真正的将缓冲数据写入到磁盘
这样的操作提高的效率,但是带来了数据丢失的风险,所以操作系统提供了fsync 和fdatasync两个同步函数,让用户调用强制让缓冲区写入磁盘,从而确保数据的安全性

3.AOF重写

因为aof文件记录的是数据库执行的修改操作命令,这意味着随着时间的流逝,aof文件中的内容将越来越多。为了解决这个问题redis使用AOF重写——redis服务器可以创建一个新的aof文件来替代现有的aof文件,二者保存的数据库数据相同,但是新的文件不会保存冗余命令(set mswww.yii666.comg "a" 然后执行set msg "b" 其实aof文件只需要保存set msg "b" )

3.1 AOF 重写原理

AOF重写并不是分析已有文件,而是读取数据库中的数据,将数据转化为命令。首先读取数据库中的键和值,然后使用一条命令来记录键值对,这就是aof重写的实现原理(对于哈希,集合,有序集合,列表键值对,redis一条命令只会记录64个元素,超过64个元素,将使用多条命令记录)

3.2 AOF 后台重写

AOF重写程序将使用子进程的方式执行命令,从而让服务器进程可以继续处理请求。

为了解决重写过程中,键值对被修改的文章来源地址19008.html问题,redis使用aof重写缓冲区,在重写过程中,用户修改数据库的命令会被保存到AOF缓冲区和AOF重写缓冲区。子进程完成AOF重写后,会将AOF重写缓冲区中的命令同步到新AOF文件中,这时候新文件保存的内容就和数据库一致了。然后子进程将修改新AOF文件名称,原子的覆盖旧AOF文件。

来源于:Redis RDB 与AOF


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • linux服务器时间同步失败解决方法
    linux服务器时间同步失败解决方法1、为什么会时间不同步:①计算机的时间是根据电脑晶振以固定频率震荡而产生的,由于晶振的不同或者老化,会 ... [详细]
  • 现在需要用到php(现在可以用)
    本文目录一览:1、现在在工作中PHP用到的多么? ... [详细]
  • Jenkins教程:使用Jenkins进行持续集成
    【注】本文译自:https:www.edureka.coblogjenkins-tutorial本文将重点介绍Jenkins架构和Jenkins构建管道,并向您展示如何在Jenki ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • yii2 绑定框架事件
    后端开发|php教程php,yii2后端开发-php教程我想要添加自定义代码处理yii2框架的Application::EVENT_BEFORE_REQUEST时触发的事件,但是不 ... [详细]
author-avatar
个阖家团圆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有