RDB

  RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘(默认是 dump.rdb)。

  默认持久化机制,就是将内存中的数据以快照的方式写入二进制文件dump.rbd中。

  触发快照的条件

    1.自己配置快照规则

      save <second> <exchanges>

      second 秒内,key的修改数量大于exchanges时,执行快照

      save的关系是或的关系,都满足

      

      默认文件名为 dump.rdb

      默认路劲为配置文件下的当前路径

      

      获取配置文件中的快照规则 config get save

      添加新规则,服务器重启后失效,config set save "second exchanges"

      

    2.save或bgsave

      save:执行内存的数据同步到磁盘的操作,这个操作会阻塞客户端的请求。(不要轻易执行,数据量大,阻塞时间差)

      bgsave:在后台异步执行快照操作,这个操作不会阻塞客户端的请求。

    3.执行flushall

      清除内存中的所有数据,只要快照规则不为空,那么redis就会执行快照。

      

    4.执行复制的时候(集群)

  快照的实现原理

    redis会使用fork函数复制一份当前进程的副本(子进程)

    父进程继续处理客户端请求。

    fork进程负责把内存的数据同步到磁盘的临时文件,当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出。

    缺点:由于子进程是复制父进程,两个内存大小相同的redis进程在系统上运行,会造成内存使用率大幅增加。

  使用rdb的优缺点

    优点:

      1.只包含一个dump.rdb文件,方便备份移动。

      2.rdb回复大数据集的速度比aof快。

      3.rdb可以最大化redis性能,因为是子进程去处理保存工作,父进程无需执行io操作。

    缺点:

      1.rbd的规则是单位时间内改变多少个键,才会触发,而在为改变之前,一旦服务器故障,就会丢失几分钟的数据

      2.当数据量大时,fork子进程会非常耗时,会造成服务器在某毫秒或长达一秒的时间停止处理客户端。并且子进程和父进程两个进程会消耗更多的内存。

AOF

  redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。

  如何配置

    appendonly 改为yes

    appendfilename:保存的文件名

    

    当修改了值后,可以看到生成了新的文件appendonly.aof

    

    vim appendonly.aof文件,可以看到每条记录都被写入aof文件中

    

  同步磁盘数据出现的问题

    redis每次更新数据时,aof机制都会将命令写入aof文件中。

    但是实际上由于操作系统的缓存机制,数据并没有实时写到磁盘,而是先写入磁盘的缓冲区,再通过硬盘缓存机制刷新保存到文件中。

    这样就可能回出现数据丢失。

  配置同步策略

    appendfsync always:每次收到命令就立刻强制写入磁盘,最慢,但是完全持久化,不推荐使用

    appendfsync everysec:每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

    appendfsync no  :完全依赖os,性能最好,持久化没保障。

    

    每一秒都将命令写入文件中,aof文件越来越大,并且很多语句会出现多余,所以引入了重写策略。

  重写策略(优化aof文件)

    auto-aof-rewrite-percentage 100 :当aof文件大小超过上一次aof文件大小的百分之多少会重写。如果之前没重写过,以启动时aof文件大小为准。

    auto-aof-rewrite-min-size 64mb :限制允许重写最小aof文件大小,也就是文件大小小于64mb,不需要进行优化。

    

  重写的实现原理

    1.redis调用fork函数,复制一个子线程

    2.父进程继续处理client请求,将请求追加到aof文件,同时收到的命令缓存起来,这样保证子进程重写失败不会出问题。

    3.子进程根据内存中的数据快照,往临时文件中写入重建数据库状态的命令

    4.当子进程将快照的命令写入临时文件后,通知父进程,然后父进程把缓存的写命令也写入临时文件

    5.当父进程写完后,将临时文件替换老的aof文件,后续命令往新的aof文件中追加

  aof文件的修复

    1.先复制原有的aof   cp appendonly.aof   appendonly.aof.bak

     2.执行 redis-check-aof --fix appendonly.aof 完成修复

  aof的优缺点

    优点:  

      1.aof的同步策略,可以让aof安全性变的非常高,并且使用每秒同步一次,redis依然可以保证很好的性能,就算发生故障,也最多只丢失一秒的数据。

      2.aof采用末尾追加的方式写入文件,即便出现问题,aof-check-aof也可以修复文件。同时aof提供了重写策略,来优化aof文件

      3.aof有序保存了对数据库执行写的操作,以redis协议数据保存,易于读和解析,并且不小心执行了flushall,也可以移除aof文件末尾的flushall命令,恢复之前的状态。

     缺点:

      1.对于相同的数据集来说,aof文件体积大于rdb文件的体积。

      2.因为采用了同步策略,aof的速度相比rdb还是要慢一些。

  两种持久化的策略可以同时使用,也可以使用其中的一种,如果同时使用的时候,那么Redis重启时,会优先使用aof文件来还原数据。

<Redis> 入门五 持久化RBD/AOF的更多相关文章

  1. redis之RDB持久化与AOF持久化

    Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态. 因为Red ...

  2. Redis使用RDB持久化和AOF持久化的区别 - 小白之所见

  3. redis入门到精通系列(五):redis的持久化操作(RDB、AOF)

    (一)持久化的概述 持久化顾名思义就是将存储在内存的数据转存到硬盘中.在生活中使用word等应用的时候,如果突然遇到断电的情况,理论上数据应该是都不见的,因为没有保存的word内容都存放在内存里,断电 ...

  4. Redis 入门到分布式 (五) Redis持久化的取舍和选择

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) Redis持久化的取舍和选择 持久化的作用 RDB AOF RDB和AOF的选择 一.持久化的作用   ...

  5. Redis(五)--- Redis的持久化RDB与AOF

    一.Redis数据库 我们都知道Redis是基于内存的数据库,数据是以key-value键值对的方式存储的,那么key-value键值对是随意放在内存中的么,其实Redis的服务会创建很多的数据库空间 ...

  6. Linux(6)- redis发布订阅/持久化/主从复制/redis-sentinel/redis-cluster、nginx入门

    一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...

  7. Redis提供的持久化机制(RDB和AOF)

    Redis提供的持久化机制 Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却 ...

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

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

  9. Redis学习——Redis持久化之AOF备份方式保存数据

    新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...

随机推荐

  1. HDU 5514 Frogs (数论容斥)

    题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 析:首先可以知道的是第 i 只青蛙可以跳到 k * gcd(ai, m),然后我就计 ...

  2. IE6 浏览器常见兼容问题 大汇总(23个)[转载]

    IE6以及各个浏览器常见兼容问题 大汇总 综述:虽然说IE6在2014年4月将被停止支持,但是不得不说的是,IE6的市场并不会随着支持的停止而立刻消散下去,对于WEB前端开发工程师来说,兼容IE6 兼 ...

  3. Linux 常用命令五 软链接和硬链接

    一.软链接 相当于windows的快捷方式,当源文件不存在时,软链接失效. 创建软链接: wang@wang:~/workpalce/python$ ls -l 总用量 -rw-rw-r-- wang ...

  4. bzoj 3159: 决战【LCT】

    只是想复健一下LCT没想到做了不得了的题--调了两天QAQ 题解是这么说的: 但是果然还不太理解--因为swap的前后问题调了好久,(所以一开始养成的习惯后面就不要再改啦-- 总之大概就是把对位置lc ...

  5. 第四篇(那些JAVA程序BUG中的常见单词)

    xxx cannot be resolved to a variable xxx无法解析为变量 resolve 解析

  6. Luogu P2458 [SDOI2006]保安站岗【树形Dp】

    题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...

  7. Intellij IDEA 快捷键整理(史上最全)

    [常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关 ...

  8. hdu 2063 过山车 (最大匹配 匈牙利算法模板)

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...

  9. [ZPG TEST 118] 最大值【dp+离线】

    题4  最大值(findmax) [题目描述] 找到一个数组的最大值的一种方法是从数组开头从前到后对数组进行扫描,令max=a[0](数组下表从0..N-1),如果a[i]>max,就更新max ...

  10. 题解报告:hdu 1160 FatMouse's Speed(LIS+记录路径)

    Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...