Redis持久化机制

一篇主要针对Redis的内存淘汰机制以及Redis容易引发的三大问题:缓存击穿、缓存穿透以及缓存雪崩进行了详细的讲解以及提供了业界常用的解决方案。本篇主要讲讲Redis的持久化机制,Redis受开发者欢迎的一大原因就是因为可持久化的特性。我们如何保证Redis宕机之后重启可以将数据进行恢复?所以一般情况下我们需要定时进行持久化将内存中的数据写入到硬盘中。而Redis中支持两种不同的持久化机制:RDB持久化以及AOF持久化。

1586482062(1).jpg

快照持久化是一次全量备份,备份的是内存数据的二进制序列化格式。而AOF持久化是增量备份,记录的是内存数据修改的指令记录文本。所以AOF持久化生成的日志会随着运行时间变长而变得越来越臃肿,每次重启Redis都需要加载AOF日志进行指令重放,所以需要定期重写AOF日志进行瘦身操作。

快照持久化(RDB)

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,子进程负责将数据集写入临时文件由于os的写时复制机制父子进程会共享相同的物理界面,当父进程处理写请求时os会为父进程创建页面副本,所以紫禁城地址空间的数据实际上就是一个快照,写入成功后,再替换之前的文件,用二进制压缩存储。RDB是Redis默认的持久化方式,会在对应的目录下生产一个dump.rdb文件,重启会通过加载dump.rdb文件恢复数据。Redis使用操作系统的多进程COW机制实现RDB持久化。

优点:

  • 只有一个备份文件dump.rdb,方便持久化备份;
  • 容灾性好,一个文件可以保存到其他存储介质;
  • 性能最大化,fork出子进程来完成写操作,让主进程继续处理命令,所以是IO最大化(使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能) ;
  • 如果数据集偏大,RDB的启动效率会比AOF更高。

缺点:

  • 数据安全性低。
  • 如果当数据集较大时,可能会导致整个服务器停止服务。

RDB持久化是 Redis 默认采用的持久化方式,可以在 redis.conf 配置文件中进行配置Redis在N秒内如果超过M个key被修改就自动做快照:

  • save 900 1:在15分钟内,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
  • save 300 10:在5分钟内,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
  • save 60 10000:在1分钟之后,如果至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

AOF持久化

AOF持久化是以日志的形式记录每一个增删操作,会将所有增删操作通过write函数追加到文件中。AOF的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启会通过执行文件中保存的写命令在内存中重建整个数据库的内容。与快照持久化相比,AOF 持久化的实时性更好,因此已成为主流的持久化方案。 默认情况下 Redis 没有开启 AOF持久化,可以通过设置 appendonly 参数开启:

  • appendonly yes

Redis通过fork出子进程,子进程根据内存中的快照,往临时文件中写入重建数据库状态的指令,父进程继续处理请求,当子进程将快照内容写入到临时文件中则发信号通知父进程将缓存中的写操作也写入到临时文件中,最后使用临时文件替代旧备份文件并进行重命名。AOF 文件的保存位置和 RDB 文件的位置相同,都是通过 dir 参数设置的,默认的文件名是 appendonly.aof。在 Redis 的配置文件中存在三种不同的 AOF 持久化方式,它们分别是:

  • appendfsync always:每次有数据修改发生时都会写入AOF文件
  • appendfsync everysec:每秒钟同步一次,将多个写命令同步到硬盘
  • appendfsync no:让操作系统决定何时进行同步

用户可以使用appendfsync everysec选项 ,让 Redis 每秒同步一次 AOF 文件,这样Redis性能几乎不会受到影响,而且这样即使出现宕机,用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候,Redis 还会优雅的放慢自己的速度以便适应硬盘的最大写入速度。

优点:

  • 数据安全性更高,AOF持久化可以配置appendfsync属性
  • 通过append模式写文件,即使中途服务器宕机,可以通过redis-check-aof工具解决数据一致性问题。
  • AOF机制的rewrite模式。

缺点:

  • AOF文件比RDB文件大,且恢复速度慢;
  • 数据集大的时候,比RDB启动效率低。
  • 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。

对于Redis的两种持久化机制的选择,主要还是得针对特定的系统讨论,看是可以牺牲一定的性能使用AOF持久化换取缓存一致性,还是在增删操作频繁时关闭备份,等到Redis空闲手动save做RDB持久化备份。所以其实最佳方案应该是采用混合持久化方案,开启混合持久化后,AOF重写日志时会将RDB持久化的内容写到AOF文件开头,于是在Redis重启时,可以先加载RDB的内容,再对增量的AOF日志进行重放,提升Redis重启的效率。
原文连接:https://segmentfault.com/a/1190000020653415

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • Redis数据持久化 Redis作为一个内存数据库,数据是以内存为载体存储的,那么一旦Redis服务器进程退出,服...
    TurboSnail阅读 615评论 0 1
  • 参考文章: Redis提供的持久化机制(RDB和AOF) 前言:本文只是一个简单的介绍和总结,具体学习还请自行查询...
    拿破仑蛋糕阅读 378评论 0 0
  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    空语阅读 1,594评论 0 2
  • 什么时候开始发现 活着 只是为了活着 这一切什么开始 什么时候结束 为了什么去生生不息究竟 大概,只是厌倦了
    lovenoo阅读 169评论 0 0
  • 带着正念练习我们的说与听 工作中的选择、生活中的关系 在实际境遇的场域中 如实的呈现 对于自己模糊不清的 愿景和未...
    郑洁118阅读 108评论 0 3