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

新增如下函数:


\

 

在执行 LOADRDB 时候,调用函数rdbLoad,加载rdb文件。

 

src/rdb.c

新增如下函数:


\

 

src/Redis.c

在函数 struct RedisCommand RedisCommandTable[]

 

新增如下一行:

\

 

src/Redis.h

在 void bgsaveCommand(RedisClient *c); 下面加入如下两行:

\

 

src/help.h

在函数 struct commandHelp

新增如下内容:

\

 

编译Redis

\

 

测试结果 

 

20170330104157320.jpg

 

可以看出,不重启Redis,可以加载数据了。

 

应用场景 

 

1、线上数据导入到测试Redis

一般开发由类似需求,用于分析问题和测试。

 

2、恢复数据

如果Redis出现误操作,可以执行在线加载数据,尤其是在sentinel(s)+Redis主从复制架构中,该方法更加渐变。

 

注意点 

 

1、如果是Redis主从复制,在主库在线加载aofile/rdbfile时,从库上也需要存在这些文件,否则从库报错退出。

 

2、执行在线加载操作时候,同样的文件内容,不要重复执行,否则从库异常退出。

 

如果主库重复执行loadrdb 时候,主库也会异常退出。

 

该方案还存在着不足之处,在这里只做抛砖引玉,希望和大家一起探讨改进,便于DBA的快捷操作。

原文发布时间为:2017-03-30

本文来自云栖社区合作伙伴DBAplus

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
异步导入导出Redis数据(利用Hiredis、Libevent)
最近工作中需要用到一个将数据从Redis导出到文本(或从文本导入Redis)的工具。找到一个用Ruby写的开源软件redis-dump(http://delanotes.com/redis-dump/)。
1236 0
MaxCompute数据仓库在更新插入、直接加载、全量历史表三大算法中的数据转换实践
2018“MaxCompute开发者交流”钉钉群直播分享,由阿里云数据技术专家彬甫带来以“MaxCompute数据仓库数据转换实践”为题的演讲。本文首先介绍了MaxCompute的数据架构和流程,其次介绍了ETL算法中的三大算法,即更新插入算法、直接加载算法、全量历史表算法,再次介绍了在OLTP系统中怎样处理NULL值,最后对ETL相关知识进行了详细地介绍。
4742 0
redis数据结构、持久化、缓存淘汰策略
redis数据结构、持久化、缓存淘汰策略Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
927 0
Redis大数据应用场景
当前已经进入大数据时代,大数据技术和产品百花齐放,在各自的应用场景发挥重要作用,Redis做为高性能的键值数据库与这些技术有着千丝万缕的联系,本文将介绍如何将Redis与Hadoop、ELK等技术进行结合。
7789 0
使用ServiceStack.Redis实现Redis数据读写
原文:使用ServiceStack.Redis实现Redis数据读写 User.cs实体类 public class User { public string Name { get; set; ...
1460 0
【测试验证】数据库加载到内存占用大小
介绍     数据库大小加载到内存占用是不是数据库的本身大小哪?今天忽然突发奇想于是就测试一下。首先我要说明的是我是在EF框架下进行测试的,不知道会不会与ado.net连接方式差生不同的结果,我仅仅是做记录,若有不足还请海涵。
830 0
数据人看Feed流-架构实践
关于Feed流的架构设计,包括以上场景中的很多业内专家给出了相应的思考、设计和实践。本人是大数据方向出身的技术人,所在的团队参与了阿里手淘、微淘Feed流的存储层相关服务,我们的HBase/Lindorm数据存储产品在公有云上也支持着Soul、趣头条、惠头条等一些受欢迎的新媒体、社交类产品。
3221 0
+关注
119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载