一、RDB持久方式

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

触发方式:

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

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

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

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

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

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

优缺点:

优点:

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

缺点:

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

二、AOF持久化方式

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

开启AOF持久化:

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

执行流程:

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

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

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

AOF重写:

触发方式:

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

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

# AOF文件当前大小/上次重写时大小,默认比值100,即当前大小是基准大小的2倍 
auto-aof-rewrite-percentage 100 # 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. [React Testing] Confidently Ship Production React Apps

    We want to make sure that when we ship new code, our users can use the application. The best way we' ...

  2. hdu5119 Happy Matt Friends(dp)

    题目链接:点击打开链接 题目描写叙述:给出n个数.求从这n个数中随意取出一些数(至少取一个)相互异或之后大于m的方案数? 解题思路:分析因为n<=40&&m<=10^6,因 ...

  3. Spring学习笔记——Spring事务仅仅对执行时异常回滚

    我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚.岂不知Spring的事务默认仅仅有在发生执行时异常即:RunTimeException时才会发生事务,假设一个方法抛出Exception ...

  4. 源码中修改Android的开机画面和动画【转】

    本文转载自:http://blog.csdn.net/dddxxxx/article/details/54343976 参照文章:http://blog.csdn.net/a345017062/art ...

  5. Hamming Distance(随机算法)

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 题意:计算任意两个十六进制的数异或后1的最少个数. 思路:用随机数随机产生两个数作为下标,记录这两个数异或 ...

  6. 【BZOJ4555】【TJOI2016】【HEOI2016】求和

    题目 传送门 解法 我们可以用容斥来求第二类斯特林数 我们知道, 第二类斯特林数\(S(n, k)\)是\(n\)个元素放进\(k\)个无标号的盒子里, 不可以含有空的. 于是我们可以考虑可以含有空的 ...

  7. BZOJ 1303

    思路: 水题  竟然不会做 尴尬 比b大的数=1 比b小的数=-1 找到b 统计一下左边比b大x的数有多少 扫右边的时候就查左边的表 就可以了 //By SiriusRen #include < ...

  8. .net core2.0 中使用aspectcore实现aop

    一.新建一个web application项目 1.1.添加AspectCore.Extensions.DependencyInjection引用 二.实现AbstractInterceptorAtt ...

  9. 自学Python九 爬虫实战二(美图福利)

    作为一个新世纪有思想有文化有道德时刻准备着的屌丝男青年,在现在这样一个社会中,心疼我大慢播抵制大百度的前提下,没事儿上上网逛逛YY看看斗鱼翻翻美女图片那是必不可少的,可是美图虽多翻页费劲!今天我们就搞 ...

  10. 【Linux】Ubuntu输入法不能开机自启的解决方法

    操作系统:Ubuntu Kylin 16.10 自从操作系统安装了搜狗输入法以后,每次重启电脑都需要手动启动Fcitx,才能启动搜狗输入法.下面给大家介绍输入法开机自启的解决方法: 操作系统的用户家目 ...