redis提供了两种持久化机制RDB和AOF机制RDB(redisDatabase):RDB保存某个时间点之前的快照数据。AOF(Append-OnlyFile):是指所有的命令行记录都以redis命令请求协议的格式完全持久化保存,保存为AOF文件。数据快照以RDB文件格式保存,然后父进程的累积命令以AOF格式保存。触发RDB快照有两种方式1:通过配置参数,如下:通过一定时间,星期天命令执行次数,超过阈值,立即执行快照save9001//有is1updatewithin900secondssave30010//30秒内有10次更新save6010000//60秒内有10,000次更新2:手动执行bgsave/save,手动触发生成快照,直接执行save会阻塞mainprocess,而bgsave会fork一个子进程来完成Snapshots,但是redis在RDB持久化的过程中有几个问题。1、Redis在RDB快照过程中是否会停止对外服务。2.如果没有,如何处理新的请求。持久化的具体过程1:主进程会fork出一个子进程2:子进程会共享主进程的一部分数据空间,并将共享数据设置为只读状态。在这个过程中,子进程使用rdb协议来实现持久化3:在持久化的过程中,不可避免的会有新数据的写入,因为我们的一些数据是共享的,两个进程同时拥有一份数据时间,这肯定会导致数据不一致。但是,这取决于操作系统的fork机制。修改的时候,需要修改一些内存页的数据。此时会触发对应内存页的copyonwrite操作,不会影响子进程的持久化。持久化结束后,主进程会将RDB文件格式回收给子进程。redis的rdb文件格式是一种非常紧凑的格式。开头的REDIS是一种固定的格式。当redis发现持久化文件不是以REDIS开头时,会报错0006,是RDB_VERSION当前RDB协议的版本AUX_FIELD_KEY_VALUE_PAIRS是一些辅助字段数据,也就是保存的数据。数据会先选择redis_db,选择db后就是key-value对的数据。对应的键值对会分为有设置过期时间的和没有设置过期时间的。时间数据RDB持久化的优点1:二进制数据非常紧凑,数据恢复速度非常快2:在持久化的过程中,性能最大化,fork子进程完成写操作,主进程继续处理命令。使用单独的子进程进行持久化,保证redis的高性能RDB持久化缺点1:数据安全性低,RDB是间隔持久化的,如果redis在持久化之间失败,会出现数据丢失2:linuxfork后,kernelset父进程中的所有内存页权限为readonly,然后是子进程的地址空格指向父进程。当父子进程都处理只读内存时,他们相安无事。当其中一个进程写入内存时,CPU硬件检测到内存页是只读的,因此触发页面错误并进入内核的中断例程。在中断例程中,内核的copyonwrite机制会将触发的异常页复制一份,因此父子进程各持有一份独立的副本。如果此时有大量的写操作,会产生大量的分页错误(pageexceptioninterruptpage-fault),在复制上会消耗大量的性能。AOF持久化执行过程通过appendonlyyes开启。Redis使用单线程响应命令。如果每条AOF文件命令都追加到磁盘上,会极大地影响处理性能。所以,Redis首先写入aof缓冲区,根据用户配置的同步盘。策略写入aof文件,通过appendfsync参数可以配置同步策略:含义如下appendfsyncalways#表示每次更新操作后手动调用fsync()将数据写入磁盘appendfsynceverysec#表示每秒同步一次(妥协方案,默认值)appendfsyncno#表示操作系统将数据缓存同步到磁盘(快速响应客户端,AOF不同步数据,同步文件负责同步文件,通常最长同步周期为30S)AOF重写机制与命令如果连续写入AOF,文件会越来越大。为了解决这个问题,Redis引入了AOF重写机制来压缩文件大小。AOF文件改写是将Redis进程中的数据转换为写入命令,并同步到新的AOF文件中的过程。AOF重写机制可以手动触发和自动触发。手动触发:bgreweuteaof命令自动触发:auto-aof-rewrite-percentage100#表示当前AOF文件空间占上次rewrite后AOF文件空间的比例(100%)auto-aof-rewrite-min-size64mb#表示AOF改写时的最小文件体积AOF的优点:数据安全,AOF持久化appendfsync属性可以配置,一直都有,每执行一次命令操作,都会在aof文件中记录一次。AOF的缺点:当数据集比较大时,它的启动效率不如RDB。可以通过aof-use-rdb-preambleyes启用混合持久化。加载时会先识别AOF文件是否以REDIS字符串开头。如果是这样,请按照RDB格式加载。加载完RDB之后,继续加载AOF格式的rest。混合持久化方案兼顾了RDB的速度和AOF的安全性。关注我的技术公众号,每周推送优质技术文章。微信扫描下方二维码关注:
