《一个小改进,解决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
新增如下函数:
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);
}
}
(编辑:ASP站长网)
|