加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

一个小改进,解决Redis数据在线加载大痛点

发布时间:2020-12-15 05:02:08 所属栏目:安全 来源:网络整理
导读:《一个小改进,解决Redis数据在线加载大痛点》要点: 本文介绍了一个小改进,解决Redis数据在线加载大痛点,希望对您有用。如果有疑问,可以联系我们。 作者介绍 顾伟涛,曾任职于百度、奇虎360,现为杭州铭师堂教育资深DBA,擅长数据库监控、备份、高可用架构

《一个小改进,解决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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读