《Redis源码学习笔记》AOF
《Redis源码学习笔记》文章列表
由于图片较大,缩放较为模糊,请双击打开查看原图 ^_^
Redis提供两种持久化方式,RDB和AOF;与RDB不同,AOF可以完整的记录整个数据库,而不像RDB只是数据库某一时刻的快照;
那么AOF模式为什么可以完整的记录整个数据库呢?
原理:在AOF模式下,Redis会把执行过的每一条更新命令记录下来,保存到AOF文件中;当Redis需要恢复数据库数据时,只需要从之前保存的AOF文件中依次读取命令,执行即可 eg.
def processCommand(cmd, argc, argv): # 执行命令 call(cmd, argc, argv) # 该命令变更了键空间并且AOF模式打开 if redisServer.update_key_space and redisServer.aof_state & REDIS_AOF_ON: feedAppendOnlyFile(cmd, argc, argv) def feedAppendOnlyFile(cmd, argc, argv): # 把命令转换成AOF协议格式 aofCmdStr = getAofProtocolStr(cmd, argc, argv) redisServer.aof_buf.append(aofCmdStr ) # 存在一个子进程正在进行AOF_REWRITE if redisServer.aof_child_pid != -1: # 把变更命写写到aof重写缓存 redisServer.aof_rewrite_buf_blocks.append(aofCmdStr )