ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis持久化机制

2021-07-14 18:00:45  阅读:172  来源: 互联网

标签:AOF 触发 持久 aof Redis redis 文件 化机制 size


Redis持久化机制:

RDB快照
AOF日志

一. RDB快照

1.概念

RDB是把当前进程数据生成快照保存到硬盘的过程(以二进制方式写入磁盘)

2.触发机制: 手动和自动

【1】手动触发分别对应save和bgsave命令
·save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用 ·bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短
【2】自动触发就是在配置文件中使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改 时,自动触发bgsave

3.优缺点

产生的文件小,恢复速度快, 由于每次生成RDB开销较大(需要fork子进程,属于重量级操作,会导致redis卡顿若干秒),无法做到实时持久化

4.禁用持久化

命令 config set save ""

二. AOF日志

1.概念

以独立日志的方式记录每次命令, 重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用 是解决了数据持久化的实时性

2.开启方式

查询aof是否开启: 
命令 config get appendonly
开启AOF: 1)命令行(实时生效,但重启后失效): config set appendonly
2)配置文件(需重启生效): appendonly yes,默认不开启

3.触发策略

手动触发:
执行命令 bgrewriteaof

3种自动触发:
(1)每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
(2)每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失(推荐)
(3)不同no:从不同步

4.AOF工作流程

1.所有写入命令追加到aof_buf缓冲区(redis是单线程响应命令,如果每次命令都直接追加到磁盘,会影响磁盘的负载)
2.aof缓冲区根据对应的策略向磁盘做同步操作
3.随着aof文件越来越大,需要定期对aof文件进行重写,达到压缩目的
4.redis重启时,可以加载aof文件进行数据恢复

5.AOF重写机制

原因: 
AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多.当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩
重写原理:
Redis 会fork出一条新进程,读取内存中的数据,并重新写到一个临时文件中...最后替换旧的aof文件
触发机制:
当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。这里的“一倍”和“64M” 可以通过配置文件修改
手动触发:
直接调用bgrewriteaof命令。 自动触发:
根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机
·auto-aof-rewrite-min-size:表示运行AOF重写时文件最小体积,默认 为64MB。 ·auto-aof-rewrite-percentage:代表当前AOF文件空间 (aof_current_size)和上一次重写后AOF文件空间(aof_base_size)的比值。 自动触发时机=aof_current_size > auto-aof-rewrite-minsize &&(aof_current_size-aof_base_size)/aof_base_size>=auto-aof-rewritepercentage

三. RDB和AOF同时开启可能存在的坑

场景: 如果redis以rdb模式运行了,然后关闭redis,配置文件配置开启aof,重启redis,此时会发现redis中没有数据

原因: redis会优先基于aof去恢复,,即使没有.aof文件,,他会创建一个新的空的.aof文件....

解决方案: 停止redis,关闭aof,拷贝rdb备份,重启redis,确认数据恢复, 直接在命令行热修改redis配置(redis的客户端执行命令: config set appendonly yes),打开aof, 这时redis就会将内存中的数据对应的日志,写入aof文件中, 此时aof和rdb两份数据文件的数据就同步了

 

标签:AOF,触发,持久,aof,Redis,redis,文件,化机制,size
来源: https://www.cnblogs.com/Baker-Street/p/15012188.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有