持久化介绍

redis 提供了两种方式方式进行数据的持久化(将数据存储到硬盘中);第一种称为快照(snapshotting)RDB,它将某一时刻的所有数据都写入硬盘,所以快照是一次全量备份,并且存储的数据形式是二进制序列化形式;另一种方式是只追加文件(append-only file)AOF, 它会在执行命令时将命令复制一份到硬盘中,AOF在长期运行中会变的非常庞大,数据库重启加载AOF日志将会很慢;

redis 将数据持久化的主要原因就是重用数据,或者防止系统故障,备份数据;

两种方式的持久化是可以同时存在的,但是当Redis重启时,AOF文件会被优先用于重建数据

工作原理

快照工作原理

redis的快照必须要求文件IO操作,单线程的redis进行多余的IO操作会影响服务器的性能,所以redis采用COW(copy on write)机制实现快照的持久化;

  • 首先redis进行会fork一个子进程,此时就存在父子进程;
  • 父进程负责进行修改操作,内存持续增加;而子进程数据不做任何变化;
  • 子进程将瞬间数据写入磁盘的rdb文件

AOF工作原理

AOF日志存放了redis指令顺序序列;所以只要重新执行AOF文件包含所有的命令就可以实现AOF文件记录的所有数据;

常用配置

RDB配置

默认文件

dbfilename dump.rdb
dir ./

redis会将数据默认dump至dump.rdb文件中;我们可以通过配置修改dump的频率;

#在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 900 1
#在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 300 10
#在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照
save 60 10000

如果想要禁用快照功能,注释掉如上配置,开启save "" 配置

save ""
#save 900 1
#save 300 10
#save 60 10000

手动备份

save命令是阻塞命令 ,当服务器接收到save命令之后就会开始拍摄快照,在此期间不会处理其他请求;

bgsave命令也是立即拍摄快照,非阻塞命令,而是fork一个子线程进行备份快照;

缺点

  • 每隔一段时间进行一次持久化,如果redis崩溃,可能会导致部分数据丢失问题;
  • RDB使用fork()子进程进行数据的持久化,如果数据量大,可能花费的时间较长,redis会造成明显的卡顿几秒现象;
  • 很好的备份效果,容易进行数据恢复;

优点

  • 相比AOF,在数据量比较大的情况下,RDB的启动速度更快;
  • RDB使用fork()子进程进行数据的持久化,本身不会有多余的IO操作;

AOF配置

启用AOF

appendonly yes

默认文件

appendfilename "appendonly.aof"
dir ./

fsync

如果redis发生宕机事件,有可能没来的及数据写入磁盘;此时redis AOF 的 fsync 策略能够保证redis保持高性能,和尽可能的减少数据丢失;默认就是使用 1s执行一次同步;

#每次有数据修改发生时都会写入AOF文件。
#appendfsync always
#每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync everysec
#从不同步。高效但是数据不会被持久化。
#appendfsync no

AOF重写

AOF日志文件会随着redis运行越来越庞大,Redis 提供了 bgrewriteaof 指令用于对 AOF 日志进行瘦身;也可以使用配置文件进行自动瘦身;

# 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100
# 当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
auto-aof-rewrite-min-size 64mb

要禁用自动的日志重写功能,我们可以把百分比设置为0

auto-aof-rewrite-percentage 0

优点

  • 使用fsync每秒一次同步,数据完整性较高;
  • redis如果发生宕机,支持使用redis-check-aof 工具修复损坏的AOF文件

缺点

  • AOF文件的大小一般会比RDB文件大
  • AOF在运行效率上往往会慢于RDB

关注公众号:知识追寻者,获取一线大厂面经

一文吃透redis持久化,妈妈再也不担心我面试过不了!的更多相关文章

  1. 妈妈再也不担心我面试被Redis问得脸都绿了

    长文前排提醒,收藏向前排提醒,素质三连 (转发 + 在看 + 留言) 前排提醒! 前言 Redis 作为一个开源的,高级的键值存储和一个适用的解决方案,已经越来越在构建 「高性能」.「可扩展」 的 W ...

  2. 妈妈再也不用担心别人问我是否真正用过redis了

    1. Memcache与Redis的区别 1.1. 存储方式不同 1.2. 数据支持类型 1.3. 使用底层模型不同 2. Redis支持的数据类型 3. Redis的回收策略 4. Redis小命令 ...

  3. 多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了

    1.引言 对于即时通讯网来说,所有的技术文章和资料都在围绕即时通讯这个技术方向进行整理和分享,这一次也不例外.对于即时通讯系统(包括IM.消息推送系统等)来说,MQ消息中件间是非常常见的基础软件,但市 ...

  4. 有了 tldr,妈妈再也不用担心我记不住命令了

    引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ...

  5. 妈妈再也不用担心我使用git了

    妈妈再也不用担心我使用git了 Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:ms ...

  6. 利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了

    前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体 ...

  7. python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了

    我们上次做了 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍 有些朋友觉得 利用正则表达式去提取信息 太特么麻烦了 有没有什么别的方式 更方便过滤我们想要的内容啊 emmmm 你还别说 还 ...

  8. [翻译自官方]什么是RDB和AOF? 一文了解Redis持久化!

    ​概述 本文提供Redis持久化技术说明,  建议所有Redis用户阅读. 如果您想更深入了解Redis持久性原理机制和底层持久性保证, 请参考文章 揭秘Redis持久化: http://antire ...

  9. 锋利的js之妈妈再也不用担心我找错钱了

    用js实现收银功能. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

随机推荐

  1. 记一次TOMCAT一段时间自动关闭

    最近同事开发的一个项目部署上线后用过几天就TOMCAT自动关闭,并且该项目没有开通对外访问.通过阿里云监控台查看,从升级后系统内存占用上升趋势,CPU等信息没有太大变化. 打印服务器日志后发现全是线程 ...

  2. Java中增强一个类的几种方法

    今天有人问我怎么增强一个类的功能.博客刚好没东西,今天就讲讲增强类. 增强的手段有三种类型: 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但 ...

  3. 12、Java 正则表达式

    简介 用来描述或者匹配一系列符合某个语句规则的字符串 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 一.正则 ...

  4. IDEA操作jdbc总结

    今天学习IDEA操作JDBC,MySQL包导入到项目 // 1.注册数据库的驱动// Driver driver=new com.mysql.jdbc.Driver();// DriverManage ...

  5. Markdown上手

    Markdown 学习日记 标题 二级标题 两个#+空格 快捷键:Ctrl + 2 三级标题 三个#+空格 快捷键:Ctrl + 3 最多支持六级标题 字体 加粗 文字 两个 *+文字+两个 * 快捷 ...

  6. 使用java API进行zip递归压缩文件夹以及解压

    一.概述 在本篇文章中,给大家介绍一下如何将文件进行zip压缩以及如何对zip包解压.所有这些都是使用Java提供的核心库java.util.zip来实现的. 二.压缩文件 首先我们来学习一个简单的例 ...

  7. Butterfly侧边栏引入一言

    此教程涉及修改源码 背景 在修改每页显示7篇文章后,出现了这种情况. 这是完美主义(强迫症)的我所不能忍受的,有什么可以占据这里的呢?{% btn 'https://hitokoto.cn/',一言, ...

  8. ElementUi——el-select下拉框

    <el-select v-model="ruleForm.status" placeholder="请选择状态" @change="styleC ...

  9. 把H2数据库从jar包部署到Kubernetes,并解决Ingress不支持TCP的问题

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! H2 Database是一个优秀的数据库,又小又方便,支持内存和文件形式,经常会在测试.POC(proof of conce ...

  10. nohup 命令的使用

    nohup 命令的使用 1. nohup简介 nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号.在注销后使用 nohup 命令运行后台中的 ...