我们都知道 Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。

Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。

RDB(Redis DataBase) 详解

RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。

RDB (Redis DataBase)的优缺点

优点:

1 适合大规模的数据恢复。

2 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。

缺点:

1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。

2 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍),最后再将临时文件替换之前的备份文件。

所以Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。

1.Redis服务端接受到BGSAVE命令。

2.Redis服务端通过fork()来生成一个名叫redis-rdb-bgsave的进程,由redis-rdb-bgsave子进程来创建RDB文件,而Redis主进程则继续处理客户端的命令请求。

3.当redis-rdb-bgsave子进程创建完成RDB文件,会向Redis主进程发送一个信号,告知Redis主进程RDB文件已经创建完毕,然后redis-rdb-bgsave子进程退出。

4.Redis服务器(父进程)接手子进程创建的RDB文件,BGSAVE命令执行完毕。

Redis主进程因为创建子进程,会消耗额外的内存。

需要注意的是:如果在Redis主进程fork子进程的过程中花费的时间过多,Redis仍然可能会阻塞。

BGSAVE是一个异步命令,Redis客户端向Redis服务端发送BGSAVE命令后会立即得到回复,而实际的操作在Redis服务端回复之后才开始。

AOF(Append Only File) 详解

AOF :Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

AOF(Append Only File) 的优缺点

优点:数据的完整性和一致性更高。

缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。

混合持久化

重启 Redis 时,我们很少使用 rdb 来恢复内存状态,因为会丢失大量数据。我们通常使用 AOF 日志重放,但是重放 AOF 日志的性能相对 rdb 来说要慢很多,这样在 Redis 实例很大的情况下,启动需要花费很长的时间。

Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。将 rdb 文件的内容和增量的 AOF 日志文件存在一起。这里的 AOF 日志不再是全量的日志,而是自持久化开始到持久化结束的这段时间发生的增量 AOF 日志,通常这部分 AOF 日志很小。

总 结

1. Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。

2. RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。

3. Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。

4. AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。

5. Redis 针对 AOF文件大的问题,提供重写的瘦身机制。

6. 若只打算用Redis 做缓存,可以关闭持久化。

7. 若打算使用Redis 的持久化。建议RDB和AOF都开启(混合持久化)。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。

官方链接:

Redis Persistence

https://redis.io/topics/persistence

redis日志_面试题之Redis如何保证系统宕机数据不会丢失?相关推荐

  1. redis日志_为什么我的Redis这么“慢”?

    Redis 作为内存数据库,拥有非常高的性能,单个实例的 QPS 能够达到 10W 左右. 图片来自 Pexels 但我们在使用 Redis 时,经常时不时会出现访问延迟很大的情况,如果你不知道 Re ...

  2. docker redis 配置文件_基于Docker搭建Redis一主两从三哨兵

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:oscarwin juejin.im/post/5d26b03de51d454fa3 ...

  3. Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例

    学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...

  4. redis续期_面试官:Redis分布式锁如何解决锁超时问题的?

    一.前言 关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题 ...

  5. Redis学习_第六章(Redis面试、进阶知识点)

    目录 1:redis的数据类型和使用特点 2:redis实现分布式锁 3:如何保证redis的数据都是热点数据 4:redis数据的过期策略(懒汉模式和定期模式100毫秒) 5:redis的缓存穿透( ...

  6. redis 连接数据库_如何连接到Redis数据库

    redis 连接数据库 介绍 (Introduction) Redis is an open-source, in-memory key-value data store. Whether you'v ...

  7. python redis 操作_使用Python操作redis

    在使用python操作redis之前,需要先安装redis库: pip install redis. 创建连接方式: StrictRedis:实现大部分官方命令. Redis:是StrictRedis ...

  8. key redis 遍历_快乐运维Redis大数据量查询与清理

    一. keys命令(生产环境禁止使用) 简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代 ...

  9. redis 转义字符_阿里巴巴官方最新 Redis 开发规范

    点击上方"蓝字"关注我们 本文转载自公众号"Java 高效学习"(ID: coder_love),原文链接 本文主要介绍在使用阿里云 Redis 的开发规范,从 ...

最新文章

  1. 手机群发短信脚本python
  2. mysql设置Tooken过期时间_基于thinkPHP3.2实现微信接入及查询token值的方法
  3. 水抗攻击 apt攻击手段
  4. Java中关于==和equal的区别 以及equals()方法重写
  5. Android 浏览器的研究(四)--- Apk的启动和主页的加载过程
  6. mysql教程 api_Mysql入门系列:MySQL可用的API
  7. java 技术点_Java的21个技术点和知识点归纳
  8. Ukiyo-e faces dataset 浮世绘面孔数据集
  9. 中文巨量模型“源1.0”的学习优化方法
  10. 【ACDU】国产数据库有奖征文活动开始啦!发原创奖京东卡,最高可领1000元!...
  11. PYTHON开发--面向对象基础入门
  12. HTML5_Canvas_属性、定义及方法
  13. 如何在苹果Mac上设置文档样板,开启文档时自动复制?
  14. 入门机器学习(西瓜书+南瓜书)模型选择与评估总结(python代码实现)
  15. Docker安装ik分词器
  16. Pcshare远控源码偏重分析(一)
  17. Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试
  18. 唯美的古风句子_经典优美的古风句子
  19. Excel表格拆分,教你三个绝招。
  20. 基于matlab的双目摄像头标定

热门文章

  1. c语言三元组稀疏矩阵的转置实验报告,稀疏矩阵快速转置 数据结构实验报告
  2. PHP被浏览器解释成注释,HTML+CSS入门 在HTML中嵌入的php代码会被浏览器注释掉如何解决...
  3. 莒南机器人_莒南五小学子 在2020年世界FTF青少年无人机大赛中 荣获佳绩
  4. 2评分标准多少分_突发!财政部刚刚通知!2020年中级考试题目分值及评分标准大变!...
  5. Jsp+Servlet+Mysql实现的在线鲜花商城源码
  6. 基于JAVA+SpringMVC+MYSQL的记账管理系统
  7. 基于JAVA+Servlet+JSP+MYSQL的学生选课管理系统
  8. 每日一算法 ---- 冒泡排序
  9. 究竟 javascript 错误处理有哪些类型?
  10. [BZOJ5329][Sdoi2018]战略游戏 圆方树+虚树