一、RDB持久方式

RDB持久化是把当前进程的数据已快照的形式保存到硬盘的过程。

触发方式:

1、手动触发命令:save和bgsave

save:阻塞式,内存较大的实例在执行过程中会造成长时间的阻塞,影响主进程上的正常服务请求。

bgsave:fork子进程,RDB持久化的过程在子进程中进行,完成后自动结束进程,并通知主进程。阻塞发生在fork阶段,时间较短。

2、自动触发:满足RDB持久化条件后会自动执行持久化过程。

  • 相关配置:
  1. ################# SNAPSHOTTING ####################
    # 触发自动保存条件 # save <seconds> <changes>
    # save <秒> <修改次数>
    # 900s有一次改变触发一次持久化
    save 900 1
    save 300 10
    save 60 10000
  2.  
  3. # 设置保存快照失败时,是否停止redis命令写入
    # 默认开启,拒绝所有写操作,保证内存和持久化数据一致
    stop-writes-on-bgsave-error yes
  4.  
  5. # 是否在导出.rdb文件时采用LZC压缩
    rdbcompression yes
  6.  
  7. #是都开启CRC64校验
    rdbchecksum yes
  8.  
  9. # 保存数据库的文件名称
    dbfilename dump.rdb
  10.  
  11. # 保存数据库的文件所在目录 dir ./
    ########################################
  • 从节点执行全量复制操作。
  • 执行debug reload命令。
  • shutdown命令,若未开启aof自定执行bgsave

持久化失败的可能原因:fork子进程内存不足,或rdb所在文件夹没有写权限。

优缺点:

优点:

  • 保存了某个时间点的数据,适合备份;
  • 与AOF相比,恢复大数据集效率更高;

缺点:

  • 非实时备份,redis宕机时会丢失部分数据;
  • 数据大时,fork子进程比较耗时,会阻塞客户端响应;
  • RDB文件需满足特定格式,兼容性差;

二、AOF持久化方式

AOF持久化是通过保存redis服务器执行的写命令来记录数据库状态。即当redis执行了写命令,该命令就会被追加到AOF文件末尾。

开启AOF持久化:

  1. ############################## APPEND ONLY MODE ###############################
    # 开启aof,默认关闭 appendonly yes
    # 保持的文件名
    appendfilename "appendonly.aof"
  2.  
  3. # 同步策略
    # always 每次有新命令,就将缓冲区写入同步到AOF文件
    # everysec(默认) 每秒写入并同步
    # no 同步操作交给操作系统
    appendfsync everysec
  4.  
  5. # 重写时是否继续写AOF文件(开启IO性能会影响redis性能)
    no-appendfsync-on-rewrite no
  6.  
  7. # 是否忽略最后一条可能存在问题的命令(宕机会导致数据不完整)
    aof-load-truncated yes
    #################################################################################

执行流程:

1、命令追加到AOF缓冲区(减少硬盘IO开销);

2、缓冲区根据不同策略将数据同步到硬盘;

3、定期重写AOF文件,达到压缩目的;

AOF重写:

触发方式:

1、手动触发:执行bgrewriteaof命令。

2、自动触发:当配置的条件同时满足时,自动执行AOF重写。

  1. # AOF文件当前大小/上次重写时大小,默认比值100,即当前大小是基准大小的2倍
    auto-aof-rewrite-percentage 100
  2.  
  3. # AOF文件的最小体积,默认64MB
    auto-aof-rewrite-min-size 64mb

执行流程:

  1. 主进程fork子进程执行rewrite,开销等同bgsave;
  2. fork子进程完成后,主进程继续响应其他命令,此时在保证原有AOF机制正确执行外,额外将新命令追加到一个重写缓冲区内(子进程只共享fork时的内存数据,新追加的数据临时保存在重写缓冲区)
  3. 子进程根据内存快照重写命令道新的AOF文件。
  4. 子进程重写结束后发送信号给主进程,主进程接收到信号更新统计信息,并将重写缓冲区内命令追加到新的AOF文件;
  5. 替换旧的AOF文件;

优缺点

优点:

  • 支持秒级数据持久化;
  • AOF文件可读性高,易于分析;
  • 兼容性高,可用于不同版本redis;

缺点:

  • 文件大,恢复速度慢。
  • 对文件写数据频率较高,IO压力大

Redis学习笔记(一)-持久化的更多相关文章

  1. Redis学习笔记9--Redis持久化

    redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化.redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式:二是Appen ...

  2. Redis学习笔记六:持久化实验(AOF,RDB)

    作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...

  3. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  4. Redis学习笔记之ABC

    Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...

  5. Redis学习笔记(1)——Redis简介

    一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...

  6. redis学习笔记(3)

    redis学习笔记第三部分 --redis持久化介绍,事务,主从复制 三,redis的持久化 RDB(Redis DataBase)AOF(Append Only File) RDB:在指定的时间间隔 ...

  7. Redis学习笔记(二) Redis 数据类型

    Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...

  8. Redis学习笔记4-Redis配置具体解释

    在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server   xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redi ...

  9. redis学习笔记(详细)——高级篇

    redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...

随机推荐

  1. Unable to instantiate Action, xxxAction, defined for &#39;xxx&#39; in namespace &#39;/&#39;xxxAction解决方式

    出现这个问题的解决办法主要有两个 1.假设项目没有使用Spring,则struts.xml配置文件里,这个action的class属性的路径没有写完整,应该是包名.类名 2.假设项目使用了Spring ...

  2. BeanUtils使用案例

     1.BeanUtils框架/工具(APACHE开源组织开发)    (1)BeanUtils框架可以完毕内省的一切功能.并且优化    (2)BeanUtils框架可以对String<-> ...

  3. HDU 5532 / 2015ACM/ICPC亚洲区长春站 F.Almost Sorted Array

    Almost Sorted Array Problem Description We are all familiar with sorting algorithms: quick sort, mer ...

  4. VC UI界面库大集合

    Guitoolkit http://www.beyondata.com/pwc.html The Ultimate Toolbox http://www.codeproject.com/KB/MFC/ ...

  5. ASP.NET快速开发框架不得不做的几个功能、高大上档次后台管理UI界面

    俗话说磨刀不误砍柴工,确实,一早上花一个小时去磨刀一天下来肯定能多砍很多柴.我们做软件开发也是同样的道理,有套好开发框架在手里,开发也是事半功倍.那么一套MVC快速开发框架至少得具有哪些功能才能帮我们 ...

  6. B3300 [USACO2011 Feb]Best Parenthesis 模拟

    这是我今天遇到最奇怪的问题,希望有人帮我解释一下... 一开始我能得90分: #include<iostream> #include<cstdio> #include<c ...

  7. 简述RTMPDump与编译移植

    RTMPDump主页 ,RTMPDump库主要包含三部分: 1.一个基本的客户端程序 2.两个服务器程序(rtmpsrv.rtmpsuck) 3.一个支持rtmp协议的库—librtmp 下载RTMP ...

  8. 82.角色管理Extjs 页面

    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&quo ...

  9. Help Me with the Game(模拟)

    http://poj.org/problem?id=2996 #include<stdio.h> #include<string.h> ][]; void find1(char ...

  10. javascript 原型(prototype 、__proto__、函数、对象)

    一.类型 1.JavaScript中分为值类型(string/boolean/null/number/undefind).引用类型(数组.对象.函数): 2.数组.函数.对象都是对象: 对象是由函数创 ...