Redis 数据持久化

Redis 中除了可以将数据保存在内存中,还支持两种数据持久化方案:RDBAOF,实现将内存中的数据持久化到磁盘中,防止数据意外丢失。

一、RDB

使用 RDB 持久化时,Redis 会 fock 出一个子进程,并将数据持久化的操作交给子进程去处理,而主进程则继续处理客户端的请求,这也保证了性能。子进程要持久化那些数据在子进程创建成功时就能立即确定下来了,所以 RDB 持久化也称作快照持久化

Redis 中默认是开启 RDB 持久化的,默认用一个名为dump.rdb的文件保存持久化数据,当子进程完成一次 RDB 持久化时,会用新的dump.rdb文件覆盖旧的文件,Redis 下次启动时会去加载这个文件,实现数据的恢复。

RDB 持久化相关的配置如下:

# 数据持久化的规则,也是开启 RDB 持久化
save 3600 1
save 300 100
save 60 10000
save 10 2
# 持久化出错时,是否继续处理客户端的写命令
stop-writes-on-bgsave-error yes
# 是否压缩持久化文件
rdbcompression yes
# 持久化文件名
dbfilename dump.rdb
# 持久化文件目录,默认就是 Redis 的启动目录,RDB 和 AOF 的持久化文件都会保存在该目录
dir ./

关于数据持久化规则这里解释一下,根据实际情况,可以配置多个持久化规则来触发快照持久化,例如save 10 2,表示每10秒时,至少有2个key的值发生变化(添加、修改、删除、过期等)就进行一次快照持久化,两个条件必须同时满足。

需要注意的是,如果还不满足持久化规则时 Redis 服务器宕机了,则会造成最近的数据丢失。

除了依赖配置文件中的save规则去触发持久化,我们还可以在 Redis 客户端手动执行快照持久化命令bgsave,该命令也会使用子进程去持久化数据,是异步的,不会影响主进程正常工作。

除了bgsave,还可以手动执行save命令,但这个命令是同步的,会阻塞客户端的其它请求,很少使用,了解即可。

二、AOF

AOF 持久化是将所有执行过的 Redis 命令追加到一个后缀名为.aof文件末尾,也就是备份命令,Redis 下次启动时会将文件中记录的命令全部执行一遍来恢复数据。

AOF 持久化默认是关闭的。

下边是 AOF 持久化相关的主要配置:

# 开启 AOF 持久化
appendonly yes
# 备份命令的文件名
appendfilename "appendonly.aof"
# 备份策略,每秒钟备份一次命令
appendfsync everysec
# 触发 .aof 文件执行重写时文件体积相比上次重新时的增长率
auto-aof-rewrite-percentage 100
# 触发 .aof 文件执行重写时的最小文件体积
auto-aof-rewrite-min-size 64mb

AOF 中有三种命令备份策略:

  • always,有新的命令就追加到.aof文件中,速度非常慢,但也非常安全
  • everysec,默认的策略,每秒备份一次,兼顾了速度和安全性,Redis 服务故障时会丢失1秒的数据
  • no,由操作系统控制备份的时机,速度快,但安全性不可控

AOF 持久化机制中有一个.aof文件重写的策略,由于命令不断的追加到.aof文件尾部,会导致文件体积越来越大,所以在一定的触发条件下,Redis 会对.aof中的命令进行优化,去除无用冗余的,只保留恢复当前文件对应数据需要的最少的命令,然后用优化后的命令重建一个新的.aof文件。

AOF 的文件重写策略,不仅可以减少磁盘占用,也可以提高数据的恢复效率。

上边 AOF 配置中最后两条满足时就会触发一次 AOF 文件重写,即当.aof的文件体积大于64mb,并且体积比上次重写时大了至少一倍,则开始新一次重写。除了使用配置文件,也可以在客户端执行bgrewriteaof命令手动触发重写。

AOF 的文件重写是在一个子进程中进行的。

三、小结

备份相同的数据,RDB 的文件体积一般是要小于 AOF 的;如果同时开启了两种方式,Redis 启动恢复数据时优先使用 AOF 文件,因为 AOF 在数据备份的安全性上要好一些,可以减少数据的丢失,更能保证数据完整性;RDB 方式的数据恢复速度快一些。如果对数据安全性要求高的化,可以两种持久化方式都开启,双保险。

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

推荐阅读更多精彩内容