《一个小改进,解决Redis数据在线加载大痛点》要点:
本文介绍了一个小改进,解决Redis数据在线加载大痛点,希望对您有用。如果有疑问,可以联系我们。
作者介绍
顾伟涛,曾任职于百度、奇虎360,现为杭州铭师堂教育资深DBA,擅长数据库监控、备份、高可用架构设计和自动化运维,对Redis和MongoDB方面有深入研究,关注分布式存储、大数据存储、消息队列、搜索引擎等后端技术.
在使用Redis加载数据过程中存在一个问题,就是必须要重启Redis服务,如果是Redis主从复制架构,这样加载数据,是一件很麻烦的事情,笔者根据Redis启动时加载数据的思想,对Redis进行了改进,实现了在线加载数据,在这里和大家一起探讨下.
本文以Redis 3.0.7为例,根据Redis在启动过程中,加载数据的逻辑,为Redis增加了2个命令,分别为LOADAOF和LOADRDB,分别实现在线加载aof和rdb文件.
在执行 LOADAOF aofile时候,调用 loadAppendOnlyFile函数,加载aof文件数据.具体实现如下:
src/aof.c
新增如下函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void loadaofCommand(RedisClient *c) { if (server.rdb_child_pid != -1) { addReplyError(c,"Background save already in progress"); } else if (server.aof_child_pid != -1) { addReplyError(c,"Can't BGSAVE while AOF log rewriting is in progress"); } else if (c->argc != 2){ addReply(c,shared.syntaxerr); return; } else if (loadAppendOnlyFile(c->argv[1]->ptr) == REDIS_OK) { addReplyStatus(c,"online loadaof started,Do not repeat!!!"); } else { addReply(c,shared.err); } } |
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4292.html