首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在插入MySQL之前使用redis作为中介

在插入MySQL之前使用redis作为中介
EN

Stack Overflow用户
提问于 2015-10-25 01:48:18
回答 2查看 913关注 0票数 3

我们正在编写一个聊天应用程序,部分使用node.js。我们期望每秒有上千个插入(消息),所以我们的方法是写入redis (为每个房间使用lrange ),还有一个名为not_saved_messages的redis列表,另一个进程循环通过该列表并写入到MySQL。这是反模式吗?我们是不是应该写封信给MySQL,希望它能坚持下去?

EN

回答 2

Stack Overflow用户

发布于 2015-10-25 02:34:51

如果做得好,我认为它不一定是反模式。当然,问题的关键在于细节。

您正在尝试做的是使用mysql来记录日志,使用redis来获取实时信息,对吧?在我看来,这似乎是可行的。问题是如何将流水线作为一个整体来运行。

顺便说一句,许多大数据用户使用的东西与这个结果非常接近。例如,在数据进入关系型数据库管理系统(Oracle、PostgreSQL或MySQL)之前,欧洲核子研究组织在数据处理过程中使用了许多NoSQL解决方案。但它绝对是先进的设计领域。

票数 3
EN

Stack Overflow用户

发布于 2015-10-26 09:03:57

你可以先把数据存储在

中,而不是直接插入数据。然后,第二个进程可以从Redis中提取它,并将其插入到数据库中,一次一个“数据部分”。这里的缺点是你需要对Redis有足够的内存。

代码语言:javascript
运行
复制
// PHP program code
//...
// assuming $r is already connected Redis() instance.
$r->sadd("data_pipe", serialize($data));

然后,

代码语言:javascript
运行
复制
// Open connection to the database
open_data_connection();

$r = new Redis();
$r->connect("127.0.0.1", "6379");

while(true){
    while($xdata = $r->spop("data_pipe")){
        $data = unserialize($xdata);

        // store the data
        store_data($data);
    }

    // No more data
    sleep(30);
}

如果数据库跟不上,例如,插入数据的速度与新数据的速度一样快,您总是可以启动拾取过程两次或更多次,或者通过导入2-3个数据库中的数据来进行某种分片。

http://redis4you.com/code.php?id=016

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33321370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档