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

时间:2015-10-24 17:48:18

标签: php mysql node.js redis

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

2 个答案:

答案 0 :(得分:3)

如果做得好,我认为它不一定是反模式。魔鬼当然是在细节中。

您要做的是使用mysql进行日志记录和redis实时信息,对吧?在我看来,这可能会奏效。问题是如何使管道作为一个整体功能。

BTW,一些大数据用户使用非常接近这个结果的东西。例如,CERN在数据进入rdbms(Oracle,PostgreSQL或MySQL)之前,在数据处理过程中使用了许多NoSQL解决方案。但它绝对是先进的设计领域。

答案 1 :(得分:2)

  

您可以先将其存储,而不是直接插入数据   Redis的。然后第二个进程可以从Redis中获取并插入它   进入数据库,一次一个“数据部分”。这里有缺点就是你   将需要为Redis记忆。

// PHP program code
//...
// assuming $r is already connected Redis() instance.
$r->sadd("data_pipe", serialize($data));

然后,

// 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