1. 简介

  Redis作为内存型数据库,数据都保存在内存中,如果重启或意外宕机后,数据会全部丢失。因此,Redis提供了完善的持久化机制,将内存中的数据持久化到磁盘上,避免了完整性和安全性的问题,也方便进行数据备份和恢复。

2. 持久化方式

  • RDB:产生一个数据快照文件
  • AOF:实时追加命令的日志文件

3. RDB

  RDB(Redis Database Backup file),即Redis数据备份文件或Redis数据快照。通过执行savebgsave命令让Redis在本地生成RDB快照文件,这个RDB文件包含了整个实例接近完整的数据内容。

  • 优点

      内存小:RDB将数据压缩写入,因此要比整个实例内存小;

      恢复快:当宕机恢复时,可以快速加载RDB文件并恢复文件中的数据;
  • 缺点

      数据不全:因为是某一时刻的数据对照,因此可能会数据不全;

      消耗大:生成RDB文件时会消耗大量的CPU和内存资源;
  • 适用场景

      对丢失数据不敏感的业务场景;

      主从全量同步数据;

      数据库备份;
  • 定时生成RDB
    # 最近1分钟内,至少生成1次
    save 60 1 # 最近5分钟内,至少生成10次
    save 300 10 # 最近15分钟内,至少生成10000次
    save 900 10000
  • Copy On Write

      通过执行savebgsave命令都可以生成RDB文件,前者为前台执行,即生成RDB文件时,会阻塞整个实例,在生成之前,任何请求都是无法处理的,对于数据量非常大的实例,生成RDBwen文件将非常耗时。因此,通常会使用bgsave命令在后台执行,这样Redis依旧可以处理客户端请求,不会阻塞整个实例。

      通过执行bgsave命令生成RDB文件采用操作系统的的Copy On Write技术,即fork系统调用。fork系统调用会产生一个子进程,它与父进程共享相同的内存地址空间,于是子进程在这一时刻就能拥有与父进程的相同的内存数据,操作系统将父进程的内存页表拷贝给子进程,如果整个Redis实例内存占用很大,那它的内存页表也会很大,在拷贝时就会非常耗时,同时这个过程也会消耗大量的CPU资源。在完成拷贝之前父进程处于阻塞状态,无法处理客户端请求。即fork系统调用完成之后,子进程把全部数据写入到RDB文件中;以此同时,父进程依旧处理客户端的请求,当在处理写命令时父进程会从操作系统申请新的内存地址空间,不再与子进程共享,这样父子进程的内存会分离开,父进程在新申请的内存地址中修改数据对子进程不受影响。

      由此可以看出,通过执行savebgsave命令在生成RDB文件时,不仅消耗CPU资源,还有需要占用最多一倍的内存空间。因此,使用此方式时需要评估即fork系统调用耗时,并且保证Redis实例所在的机器拥有足够的CPU和内存资源,并合理设置生成RDB的时机。

4. AOF

  AOF(Append Only File)即追加日志文件。它与RDB不同的是,AOF中记录的是每一个命令的详细信息,包括完整的命令类型、参数等。只要产生写命令,就会实时写入到AOF文件中。

  • 优点

      数据完整:AOF数据文件更新比较及时,比RDB保存更完整的数据,这样在数据恢复时能够恢复尽量完整的数据,降低丢失数据的风险。
  • 缺点

      增加IO负担:随着时间增长,AOF文件会越来越大

    AOF文件刷盘会增加磁盘IO的负担,可能影响Redis的性能(开启每秒刷盘时)。
  • 适用场景

      对丢失数据敏感的业务场景。

      Redis会优先使用AOF文件进行数据恢复。
  • 刷盘方式

      开启AOF后,Redis会把每个写操作的命令记录到文件并持久化到磁盘中,为了保证数据文件的安全性,Redis还提供了三种文件刷盘的机制:

      (1)appendfsync always:每次写入都刷盘。对性能影响最大,占用磁盘IO比较高,数据安全性最高。

      (2)appendfsync everysec:1秒刷一次盘,对性能影响相对较小,节点宕机时最多丢失1秒的数据。

      (3)appendfsync no:按照操作系统的机制刷盘,对性能影响最小,数据安全性低,节点宕机丢失数据取决于操作系统刷盘机制。
  • 开启AOF
    # 开启AOF
    appendonly yes # AOF文件名
    appendfilename "appendonly.aof" # 文件刷盘方式
    appendfsync everysec
  • AOF重写

      Redis提供了AOF瘦身的功能,可以设置在AOF文件很大时,自动触发AOF重写,Redis会扫描整个实例的数据,重新生成一个AOF文件达成瘦身的效果。但这个重写过程也需要消耗大量的CPU资源。
    # AOF文件距离上次文件增长多少百分比时触发重写
    auto-aof-rewrite-percentage 100 # AOF文件体积达到多少时触发重写
    auto-aof-rewrite-min-size 64mb
  • 性能影响

      如果AOF的刷盘机制设置为每次写入都刷盘,那么会大大降低Redis的写入性能,因为每次写命令都需要写入文件并刷到磁盘中才会返回,当写入量很大时,会增加磁盘IO的负担。

      虽然Redis提供了实时刷盘的机制,但是在真正场景中使用的不多。通常我们会选择每秒刷盘这种方式,既能保证良好的写入性能,在实例宕机时最多丢失1秒的数据。

5. 总结

特性 RDB AOF
持久化方式 生成某一时刻的数据快照文件 实时记录每一个写命令到文件
数据完整性 不完整,取决于备份周期 相对完整性高,取决于文件刷盘方式
文件大小 压缩二进制写入,文件较小 原始的操作命令,文件大
宕机恢复时间
恢复优先级
持久化代价 高,消耗大量CPU和内存 低,只占用磁盘IO资源
使用场景 对丢数据不敏感的业务场景快速数据恢复;数据备份;主从全量复制 对于丢失数据敏感的场景

Redis数据持久化(RDB、AOF)的更多相关文章

  1. Redis数据持久化—RDB持久化与AOF持久化

    目录 Redis数据持久化-RDB持久化与AOF持久化 RDB持久化 RDB文件的创建 RDB文件的载入 自动间隔性保存 检查保存条件是否满足 AOF持久化 AOF持久化的实现 AOF文件的载入与数据 ...

  2. Redis数据持久化机制AOF原理分析一---转

    http://blog.csdn.net/acceptedxukai/article/details/18136903 http://blog.csdn.net/acceptedxukai/artic ...

  3. redis的持久化(RDB&AOF的区别)

    RDB 是什么? 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis会单独创建(fork)一个子进程来进行持久化,会 ...

  4. NoSql数据库Redis系列(4)——Redis数据持久化(AOF)

    上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失).对于数据完整性要求很严 ...

  5. Redis数据持久化之AOF持久化

    一.RDB持久化的缺点创建RDB文件需要将服务器所有的数据库的数据都保存起来,这是一个非常耗费资源和时间的操作,所以服务器需要隔一段时间才能创建一个新的RDB文件,就也是说创建RDB文件的操作不能执行 ...

  6. Redis之持久化(RDB AOF)

    Redis 提供了 RDB 和 AOF 两种持久化方案: RDB:生成指定时间间隔内的 Redis 内存中数据快照,是一个二进制文件 dumpr.rdb AOF:记录 Redis 除了查询以外的所有写 ...

  7. Redis之数据持久化RDB与AOF

    Redis之数据持久化RDB与AOF https://www.cnblogs.com/zackku/p/10087701.html 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内 ...

  8. redis之持久化RDB与AOF

    redis数据持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持 ...

  9. Redis持久化rdb&aof

    Redis持久化rdb&aof 前言 持久化:即把数据存储于断电后不会丢失的设备中,通常是硬盘 常见的持久化方式: 主从:通过从服务器保持持久化,如mongoDB的replication se ...

  10. Redis学习笔记(5)——Redis数据持久化

    出处http://www.cnblogs.com/xiaoxi/p/7065328.html 一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存 ...

随机推荐

  1. JavaScript复习大纲

    1. HTML.CSS和JavaScript各自在网页设计中的作用. 1.HTML生成结构. 2.CSS样式美化. 3.JavaScript的作用: (1) 操作HTML及CSS,让网页具有动态行为. ...

  2. IP地址分类的计算方法

    IP地址由四段组成,每个字段是一个字节,8位,最大值是255,但实际中我们用点分十进制记法. IP地址由两部分组成,即网络地址和主机地址.网络地址表示其属于互联网的哪一个网络(常见ABC三类,以固定网 ...

  3. Mysql binlog备份数据及恢复数据,学会这个,我在也不怕删库跑路啦~

    导读 我一直都主张,技多不压身(没有学不会的技术,只有不学习的人),多学一项技能,未来就少求人一次.网上经常听到xxx删库跑路,万一真的遇到了,相信通过今天的学习,也能将数据再恢复回来~~~ 当然啦, ...

  4. 三步删除U深度,老毛桃,大白菜捆绑软件!!

    ①需要下载一个软件Fbinst Tool(万能U盘制作工具).链接:http://pan.baidu.com/s/1mim9Zxm 密码:7poo②插入U盘,直接打开Fbinst Tool.首先是U深 ...

  5. 企业级工作流解决方案(十五)--集成Abp和ng-alain--Abp其他改造

    配置功能增强 Abp定义了各种配置接口,但是没有定义这些配置数据从哪里来,但是管理配置数据对于一个应用程序来说,是必不可少的一件事情. .net的配置数据管理,一般放在Web.config文件或者Ap ...

  6. IDEA创建WebService服务端与客户端

    创建服务端 一.file–>new–>project 二.点击next后输入服务端名,点击finish,生成目录如下 三.在 HelloWorld.Java 文件中右击,选 Tools 的 ...

  7. [sql 注入] insert 报错注入与延时盲注

    insert注入的技巧在于如何在一个字段值内构造闭合. insert 报错注入 演示案例所用的表: MariaDB [mysql]> desc test; +--------+--------- ...

  8. 如何在Camtasia中对录制视频添加注释

    今天我给大家带来的是一款专门录制屏幕动作的软件Camtasia,拥有了使我们的屏幕录像拥有全新的剪辑速度和更换颜色背景的特性.它不仅可以完成我们屏幕录像的心愿,还可以进行对录制的视频进行后期的编辑.这 ...

  9. ABBYY FineReader 15新增编辑页面布局功能

    ABBYY FineReader 15(Windows系统) 新增编辑页面布局功能,允许用户修改PDF数字文档的页面布局,包括添加或者删除文字段落,文字块以及图片,更改段落,文字块,图片位置.添加或者 ...

  10. 使用IDM批量抓取音效素材下载

    IDM下载器的站点抓取功能,能够抓取网站上的图片.音频.视频.PDF.压缩包等等文件.更重要的是,能够实现批量抓取操作,省时省力.今天就来看一下,如何用IDM巧妙的批量抓取音效素材. 1.进入音效合辑 ...