前言:
redis持久化方式分为两种:RDB快照和AOF方式(默认为RDB模式),当Redis服务器重启的时候,会自动恢复数据,优先从AOF中恢复,其次才从RDB中恢复
 
一、RDB快照模式
RDB方式原理:当redis需要做持久化时(执行SAVA或者BGSAVA命令,或者是达到配置条件时执行),redis会fork一个子进程,子进程将数据写到磁盘上一个临时RDB文件中,当子进程完成写临时文件后,将原来的RDB替换掉(默认文件名为dump.rdb)
 
RDB备份条件和命令:
1、执行SAVE命令,在当前线程执行,会卡住
2、执行BGSAVE命令,在后台线程执行,马上返回
3、当符合用户给定的配置条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照,在配置文件redis.conf中已经预置了3个条件:
save 900 1 # 900秒内有至少1个键被更改则进行快照 save 300 10 # 300秒内有至少10个键被更改则进行快照 save 60 10000 # 60秒内有至少10000个键被更改则进行快照
 
RDB优缺点:
定时备份,Redis效率高,但是容易造成数据丢失,丢失的多少和备份策略有关,例如:5分钟备份一次,但是第8分时宕机了,那么就丢失了后面的3分钟数据
 
一、AOF模式
AOF方式原理:AOF就可以做到全程持久化,Redis每执行一个修改数据的命令,都会把这个命令添加到AOF文件中,当Redis重启时,将会读取AOF文件进行“重放”以恢复到 Redis关闭前的最后时刻。
由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要 通过fsync函数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次)
appendonly yes              //启用aof持久化方式
# appendfsync always      //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec     //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no    //完全依赖os,性能最好,持久化没保证
 
AOF优缺点
AOF基本可以保证数据不丢失,但是AOF持久化文件会变的越来越大。例如我们调用incr test命令100次,文件中必须保存全部的100条命令,其实有99条都是多余的。

Redis持久化RDB和AOF原理的更多相关文章

  1. Linux - redis持久化RDB与AOF

    目录 Linux - redis持久化RDB与AOF RDB持久化 redis持久化之AOF redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 实验环境准备 备份这个rdb ...

  2. redis持久化 RDB与AOF

    redis持久化 RDB与AOF RDB与AOF区别 rdb: 基于快照的持久化,速度更快,一般用做备份,主从复制也是依赖于rdb持久化功能 aof:以追加的方式记录redis操作日志的文件,可以最大 ...

  3. Redis持久化----RDB和AOF 的区别

    关于Redis说点什么,目前都是使用Redis作为数据缓存,缓存的目标主要是那些需要经常访问的数据,或计算复杂而耗时的数据.缓存的效果就是减少了数据库读的次数,减少了复杂数据的计算次数,从而提高了服务 ...

  4. Redis持久化RDB和AOF优缺点是什么,怎么实现的?我应该用哪一个?

    原文http://www.ymq.io/2018/03/24/redis/ Redis是一种高级key-value数据库.数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支 ...

  5. Redis(二)、Redis持久化RDB和AOF

    一.Redis两种持久化方式 对Redis而言,其数据是保存在内存中的,一旦机器宕机,内存中的数据会丢失,因此需要将数据异步持久化到硬盘中保存.这样,即使机器宕机,数据能从硬盘中恢复. 常见的数据持久 ...

  6. redis持久化rdb和aof之间的优势劣势

    1.RDB(Redis Database) a.基本概念 概念: 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis ...

  7. Redis持久化 - RDB和AOF

    原文:https://segmentfault.com/a/1190000016021217 一.持久化的作用 1. 什么是持久化 持久化(Persistence),即把数据(如内存中的对象)保存到可 ...

  8. redis 持久化RDB、AOF

    1.redis持久化简介 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集合和有序集合.支持在服务器端计算集合 ...

  9. Redis 持久化 rdb、Aof对比

    一.Redis 简介: Redis是一个开源的.基于内存的数据结构存储器,可以用作数据库.缓存和消息中间件. Redis是一个key-value存储系统.和Memcached类似,它支持存储的valu ...

随机推荐

  1. 用两个stack实现一个队列

    class Queue { stack<int> input, output; public: void push(int x) { input.push(x); } void pop(v ...

  2. 前端ajax异步传值以及后端接收参数的几种方式

    原文参考 异步传值 前台往后台传值呢,有很多种方式,大家听我细细道来. 第一种呢,也是最简单的一种,通过get提交方式,将参数在链接中以问号的形式进行传递. // 前台传值方法 // 触发该方法调用a ...

  3. JSON和JSONP简单总结

    jsonp和json的区别,原理,在jquery中的使用 http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.h ...

  4. Codeforces 1030F 【线段树】【好题】

    LINK 题目大意: 给你n个物品,每一个物品有一个位置p和一个权值w,移动一个物品的代价是移动距离*物品权值 有q个询问: 把第i个物品的权值变成j 问把第l到第r个物品移动到一个相邻的区间中\([ ...

  5. 理解 C# 项目 csproj 文件格式的本质和编译流程

    写了这么多个 C# 项目,是否对项目文件 csproj 有一些了解呢?Visual Studio 是怎么让 csproj 中的内容正确显示出来的呢?更深入的,我能够自己扩展 csproj 的功能吗? ...

  6. objectForKey与valueForKey在NSDictionary中的差异

    从 NSDictionary 取值的时候有两个方法,objectForKey: 和 valueForKey:,这两个方法具体有什么不同呢? 先从 NSDictionary 文档中来看这两个方法的定义: ...

  7. 接口测试基础——第6篇unittest模块(二)

    通过上次的运行,大家应该已经发现了,就是我们写了三个用例,那么在测试报告中setUp和tearDown方法分别运行了三次.没错,这也就是说,每次运行用例之前都会运行setUp和tearDown方法.今 ...

  8. DML操纵语句

    --在新增数据的时候,如果在表名之后没有跟 列名,那么values()必须写全--顺序必须不能改变,这个顺序就是表中列的顺序insert into dept values(70,'20','哈哈') ...

  9. altera官方推荐时钟使用方法

    Register Combinational Logic Outputs If you use the output from combinational logic as a clock signa ...

  10. matlab中卷积编码参数的理解

    poly2trellis(7, [171 133])代表什么意思呢?首先是7,他是1*k的vector,此处k为1,[171 133]是k*n的vector,此处n就是2,那么这个编码就是1/2码率的 ...