持久化机制

上小学的时候,我们每天都要做数学题,为了加快做题的速度,我们不可能每次遇到8 x 8都要查看乘法口诀表(最主要的原因是考试的时候,老师不允许),所以我们会通过死记硬背的方式,将8 x 8 = 64记在大脑当中,这一过程就跟Redis将数据从硬盘存放到内存是一样的。

redis之所以有这么强大的性能,取决于它的数据存放在内存当中,为了在服务器重启后,内存中的数据不会丢失,需要将内存中的数据同步到硬盘中,这一过程就是持久化。

我们每天都会接触或者遇见许多形形色色的人,人的一生也会有很多过客,如果不通过写日记或者拍照留念的方式进行记录,那么几个月或者几年过后,我们对于对方的长相就会模糊甚至遗忘,这种写日记或者拍照的方式,跟Redis将数据持久化到硬盘是一样的。

1 RDB持久化

RDB持久化方式在指定时间间隔对数据进行快照存储,默认存储在当前目录的dump.rdb文件中

  1. Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);
  2. 父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件;
  3. 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。

高三的时候,班级要利用下午放学的时间拍毕业照,有些同学为了不耽误复习,会利用集队的时间跑去宿舍洗澡或者饭堂吃饭,这个时候轮到我们班拍毕业照了,没办法,就算人不齐,也会上前拍大合照,拍完合照过了几分钟,洗完澡吃完饭的同学终于小跑过来了,班主任为了不让他们的高中留下遗憾,于是说服大家,再拍一次大合照,替换掉旧的合照。

  • 优点:对于摄影师来说,不需要来一个同学就拍一次合照
  • 缺点:要等待迟到的同学

使用方式

当在指定的时间内被更改的键的个数大于指定的数值时就会触发快照

在redis配置文件中进行配置,但有多个条件时,它们之间以或的形式组合发生作用。

save 900 1 //900秒内有1个键被修改
save 300 10 //300秒内有10个键被修改
save 60 10000 //60秒内有10000个键被修改

2 AOF持久化

AOF持久化方式记录每次对服务器的写操作,默认存储在当前目录的appendonly.aof文件中

appendonly yes 开启AOF持久化,默认是每秒钟同步一次,即appendfsync everysec

还是班级拍大合照,由于洗澡吃饭的同学是陆续过来的,为了不影响学校拍照进度(主要是一直拍照的同班同学也不答应),于是班长提出迟到没来的同学单独一人自己拍照的建议,拍完之后把照片P到合照中,对于大家来说,每个同学都参与了合照,并没有漏下哪一位学生,所以这种方式也被同学们接受了。

  • 优点:没有遗漏某一位同学
  • 缺点:每个迟到的同学都要拍照,都要消耗一张底片,而且摄影师也会有意见(这里假设费用是一样的)

由于操作系统底层会对数据进行缓存,所以并不是每一次的追加操作都能直接对文件进行修改,如果这个时候发生了宕机或者重启,这部分缓存的数据将会丢失,所以Redis采用了appendfsync强制写入的方式。

使用方式

//自动重写:目的是压缩 aof文件,消除冗余或者重复设值
auto-aof-rewrite-percentage 100 //当前的aof文件大小超过上一次重写时aof文件的100%时会再次进行重写
auto-aof-rewrite-min-size 64mb //允许重写的最小aof文件大小,小于该值不进行重写

3 RDB vs AOF

持久化方式 优点 缺点
RDB 对性能影响最小 同步时丢失数据
RDB文件进行数据恢复比使用AOF要快很多 如果数据集非常大且CPU不够强,Redis在fork子进程时可能会消耗相对较长的时间,影响Redis对外提供服务的能力
AOF 最安全 文件体积大
容灾 性能消耗比RDB高
易读,可修改 数据恢复速度比RDB慢

注意

在实际的生产环境当中,可以单独使用其中一种或者二者结合使用,当开启了AOF持久化机制,服务器重启后会从aof文件中恢复数据,只有当AOF持久化关闭,服务器才会从rdb文件中恢复数据。

参考文章

AOF持久化
Redis入门指南 第2版(异步图书)
网易云课堂《Java高级开发工程师》

结语

本人所有博客仅用于学习记录,不做任何商业用途,如涉及侵权,还请联系删除,感谢阅读,欢迎留言,一起进步~

Redis学习之持久化机制相关推荐

  1. redis学习笔记-持久化

    redis学习笔记-持久化 前言 redis持久化有两种方式:RDB和AOF.分别对应着全量复制和增量复制.深刻理解各自的实现方式及适用场景对redis的使用和运维十分重要.下面就分别介绍. RDB持 ...

  2. Redis提供的持久化机制(RDB和AOF)

    Redis提供的持久化机制 Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却 ...

  3. Redis学习一:Redis两种持久化机制

    申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis是基于内存来实现的NO SQL数据库,但是我么你都 ...

  4. Redis提供的持久化机制(二)

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

  5. Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...

  6. Redis数据持久化机制AOF原理分析一---转

    http://blog.csdn.net/acceptedxukai/article/details/18136903 http://blog.csdn.net/acceptedxukai/artic ...

  7. Redis的持久化机制与内存管理机制

    1.概述 Redis的持久化机制有两种:RDB 和 AOF ,这两种机制有什么区别?正式环境应该采用哪种机制? 我们的服务器内存资源是有限的,如果内存被Redis的缓存占满了怎么办?这就要看Redis ...

  8. 缓存使用-4、Redis 持久化机制

    一.redis启动时载入持久化文件的流程. 二.redis两种持久化机制 两种持久化机制是RDB和AOF机制,下面介绍下是什么和优缺点. RDB持久化是指用数据集快照的方式记录redis数据库的所有键 ...

  9. Redis数据持久化机制AOF原理分析二

    本文所引用的源码全部来自Redis2.8.2版本. Redis AOF数据持久化机制的实现相关代码是redis.c, redis.h, aof.c, bio.c, rio.c, config.c 在阅 ...

最新文章

  1. UDP客户端向服务器发送文件,基于UDP协议的客户端与服务器端的文件传送
  2. linux as3.0 sendmail SMTP 验证 成功总结
  3. angular 内容投影
  4. vh,vw单位你知道多少?
  5. Windows安装Apache注册服务出现(OS 5)拒绝访问。 : AH00369: Failed to open the Windows service manager,
  6. mysql 账号安全_MySQL账号安全设置
  7. linux deepin 15.9双系统,windows10安装双系统Deepin15.9遇到的坑
  8. 【渝粤教育】广东开放大学 集体谈判与集体合同 形成性考核 (30)
  9. Kubernetes基于EFK进行统一的日志管理方案
  10. 分享120个HTML公司企业模板,总有一款适合您
  11. 2022年「博客之星」参赛博主:wzyannn
  12. Oracle 生僻字乱码问题
  13. 01 Spark组件 —— Scala导言
  14. linux超级好用检索跳转工具hg:hyperlinked_grep (grep+kitty)
  15. 基于IOS音乐播放器在线歌词同步小程序系统(音乐小程序)
  16. 五大内存分区,堆与栈的区别
  17. MATLAB实现小波变换去噪
  18. 电源知识——LDO线性电源、开关电源(基础)
  19. 诺贝尔奖今起揭晓 4位华裔科学家成热门
  20. JForum论坛源码部署

热门文章

  1. 实战Elasticsearch6的join类型
  2. Dev-c++下‘stoi‘ was not declared in this scope解决办法
  3. 一个程序教你花式示爱 1——波动心形线
  4. 【JavaEE初阶】第八节.网络原理网络层和数据链路层,应用层
  5. es文件浏览器添加ftp服务器,es文件浏览器新建ftp服务器
  6. 国汽智控与dSPACE达成战略合作,推动RCP和SIL从MCU到域控扩展
  7. 程序员想兼职却没有渠道?来看资深程序员在哪接单
  8. 数字图像模式识别技术详解【笔记】
  9. 广告配音和电影配音有什么区别
  10. JAVA实现矩形(长方形)的周长面积计算