- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
《Redis开发实战》
AOF持久化机制
AOF持久化机制
使用RDB方式实现的数据持久化处理,可以实现数据的快速恢复,但是在每次执行RDB持久化操作时,都需要启动新的子进程,并且会产生额外的内存开销,为了进一步提高缓存数据持久化的效率,Redis提供了AOF的处理机制,该机制记录的并不是简单的数据,而是用户所执行的每一条数据处理命令
命令压缩处理
使用AOF实现数据持久化,如果只是将用户执行的文件记录到AOF文件之中,那么在高并发的访问下,就有可能产生大量的备份命令,这样不仅会造成AOF数据文件的激增,同时也会影响数据恢复的速度,为了解决此类问题,Redis采用了命令重写的处理机制以实现命令压缩处理。例如,现在有三个不同的Redis客户端同时执行LPUSH命令,并且向同一个List集合进行数据的存储,那么按照LPUSH命令的特点来讲,三个客户端的命令可以合并为一条命令,变为“LPUSHkey数据1数据2数据3”。
AOF缓冲区
Redis在执行AOF持久化时,为了保证Redis服务的正常运行,所以采用子进程的方式来进行处理。但是这样的设计会带来数据一致性的问题,即:在子进程创建完成后,又有大量的客户端进行了主进程数据的修改,所以此时子进程中要持久化的命令将无法侦测到这些新的命令变化,从而导致持久化数据和数据库数据不一致的问题,而为了解决这一问题,Redis采用了AOF缓冲区的机制。
多AOF存储设计
在Redis-7.x之前的版本中,Redis会启动两个不同的缓冲区进行命令的存储,由于最终Redis只会创建一个AOF文件,所以每一次持久化处理的最后,子进程都要使用重写后的AOF文件去替换掉主进程生成的AOF文件,这样一来会造成内存消耗、CPU消耗以及磁盘IO的消耗,所以为了解决这样的设计问题,Redis-7.x之后的版本中采用了多AOF文件的存储设计,存储模式如图所示,这些存储文件的作用如下:
BASE文件:表示基础的AOF文件,该文件一般由子进程重写产生,最多只有一个;
INCR文件:表示增量AOF文件,一般都会在AOF持久化开始执行时创建,该类型的文件可能会有多个;
HISTORY文件:表示历史AOF文件,每一次AOF完成后都会将之前文件转为历史文件,并自动删除;
文档评论(0)