Redis--AOF
2019-04-17 本文已影响0人
简书徐小耳
AOF的原理
- 1.通过保存redis服务器的所执行的写命令来记录数据库状态。
- 2.当然redis服务器会自动包含select操作(选择数据库)
- 3.当服务器执行完写命令,会以协议格式将被执行的写命令追加到服务器状态的aof_buf的缓冲区末尾
aof_buf 写入到AOF文件的逻辑
- 1.always:每次一个命令执行完毕将缓冲区的所有内容写入并同步到AOF文件(同步是等到数据强制罗盘)
- 2.everysec:每次一个命令执行完毕将缓冲区的所有内容写入到AOF文件,如果距离上一次同步超过1秒则执行同步。
- 3.no:每次一个命令执行完毕将缓冲区的所有内容写入,同步则是由操作系统自己执行。
载入AOF文件的逻辑
- 1.创建一个fake client(因为命令只能在客户端执行)
- 2.从AOF文件分析并读取一条写命令。
- 3.使用伪客户端执行写命令。
AOF重写
- 1.因为AOF文件越来越大,所以重写AOF文件(因为可能有很多命令是针对一个key执行的可以变为一个命令)
- 2.首先创建新的AOF文件
- 3.遍历数据库
- 4.指定数据库
- 5.遍历数据库中的所有键,使用一条命令去记录键值对。
- 6.忽略已经过期的键
- 7.如果键有过期时间,会对过期时间也重写(过期键)
- 8.上述会采用子进程(子进程包含父进程的数据)去执行
- 9.在子进程重写期间,新的命令会放入AOF重写缓冲区。
- 10.redis服务器执行完一个写命令,同时将写命令发送给AOF缓冲区和AOF重写缓冲区。
- 11.当子进程扫描完所有数据库则会给父进程发送信号,父进程调用信号处理函数
- 12.信号处理函数:将AOF重写内容写入到新的AOF文件,然后对新的AOF文件进行改名,原子覆盖现有的AOF文件。
- 13.信号函数处理完毕父进程才会继续接受请求。