文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Redis持久化机制

2020-06-06 09:37

关注

Redis持久化机制

1、Redis数据持久化的必要性

由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。

2、RDB(RedisDB)

对内存中的redis全量数据进行时点快照并序列化,以文件形式保存到磁盘上,生成的是dump.rdb二进制文件。到了dump时间点就生成一份新的rdb文件,同时覆盖掉旧的。服务重启时直接将dump文件反序列化并加载到内存中,数据恢复速度较快,也是redis默认的持久化方式。hdfs的nameNode也是用类似的方式生成fsimage文件来做持久化的,hdfs的nameNode也是用类似的方式生成fsimage文件来做持久化的

执行方式:

阻塞式:

类似JVM的stop-the-world,做快照的时候不能处理客户端请求,客户端可以使用save命令触发。优点原理简单,能保证数据一致性,缺点是对用户不友好。

非阻塞式:

服务端做数据快照的时候,可以继续处理客户端的请求,客户端可以使用bgsave命令触发。优点是对客户端友好,但复杂度高,必须解决做快照的同时,并发写操作造成的数据不一致问题。
redis中的所有key和value是分为两个部分单独存储的,两个数据区之间建立映射关系,数据修改只是映射关系的改变。
大体机制:当服务端接收到bgsave命令后,服务端不会立马执行快照操作,而是选择合适的时机fork一个子进程,这个子进程全量继承父进程的key数据集和映射关系。实现类cow的效果,子进程只保证dump时点当前的数据一致性,至于并发修改的数据就交给下一次dump来持久化。

配置策略:

可以通过客户端发命令的方式,也可以写在配置文件中实现自动持久化。
save 900 1 //如果在900秒内发生了超过1次k-v更新就触发一次dump
save 300 10 //如果在300秒内发生了超过10次k-v更新就触发一次dump
save 60 10000 //如果在60秒内发生了超过1万次k-v更新就触发一次dump
dbfilename dump.rdb //快照文件名
dir /opt/redis/rep //快照存储路径
【每完成一次快照后,时间计和更新计数器都会清零】

优点:

  1. 全量备份,可以做到针对不同时间点的多版本恢复(此时需要避免覆盖问题,推荐用多服务器来存储dump文件)。
  2. 备份文件紧凑单一,利于网络传输,适合灾难恢复。
  3. 恢复大数据集速度比AOF快。

缺点:

  1. 最后一次快照时如果掉电,并发写的数据将丢失,所以适合存储能容忍这种风险的场合。
  2. fork过程会造成毫秒级的耗时,会造成短暂的拒绝相应。

3、AOF(AppendOnlyFile)

实时记录每一条写数据的命令,形成binlog,服务重启时会原样执行一遍aof文件中的所有命令,达到数据恢复的目的,但恢复速度比rdb式慢。hdfs中提供了类似的方式,edit-log,只是默认时关闭的。

几乎可以做到不丢失任何数据,也可以控制丢失一秒内的数据。
备份的数据量太大,不够紧凑,io交互频繁。
写入机制:在现代操作系统中,程序执行write系统调用时,是先将数据写到一个内存buffer中,等到buffer满或者用户执行fsync或fdatasync
指令时才会将buffer数据刷到disc上,所以未刷盘的数据存在掉电丢失风险。

落盘策略由appendfssync选项控制:

AOF重写机制:

由于AOF文件时间长了会很大,可以通过分析文件内容,将多条命令合并为一条,将对同一个key的多次操作只保留最新的那一次。

AOF重写过程

AOF重写的触发

  1. 手动式:通过客户端发送bgrewriteaof命令。
  2. 自动式:必须在配置文件中配置如下两个参数
    • auto-aof-rewrite-min-size 500mb //只有当aof文件大于等于500M时,服务器才会重写aof文件,避免过小文件的重写问题。
    • auto-aof-rewrite-min-percentage 60 //在满足最小阈值的前提下,超过上一次重写后生成的文件体积的60%时将触发重写,避免了无限循环重写。(如果尚未做过重写,就以启动时的AOF文件体积作为对比基准,如果此值为0,则表示关闭自动重写功能)。

优点:

缺点:

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯