Redis:错误表格中的数据错误

时间:2012-12-08 12:48:35

标签: database node.js redis

我正在努力解决一个阻碍我一个月的问题

我使用 Node.js& amp;来构建应用程序的后端。 Redis 由于我们的结构,我们必须将数据从一个redis表传输到另一个 (我的意思是是我们使用的那个“选择”即“选择2”)

我们收到了很多请求并在一秒钟内推出了大量响应,无论我尝试了多少我都无法阻止数据混合。假设我们有一个“teacherID”,必须存储在 Redis表#2 中。并且“studentID”必须存储在 Redis表#4 中。我尝试了多少(我多次检查过我的代码)我无法阻止 teacherID进入studentID 。我尝试的最后一个技巧实际上是在每次选择时放置回调。;

redisClient.select(4, function(err) {
  if(err)
    console.log("You could not select the table. Function will be aborted");
  else {
    // Proceed with the logic
  }
});

我不能简单地阻止这种混乱的原因是什么?让我疯狂的一个细节是它在本地和在线工作得非常好,但是当多个请求到达服务器时,它会变得混杂。有什么建议可以防止这个错误? (即使我无法与NDA共享代码,我也可以确保逻辑编码正确)

1 个答案:

答案 0 :(得分:1)

我不确定您是否要“将数据从一个redis表传输到另一个表”。通过您的示例阅读,您似乎可以简单地拥有两个写入不同数据库的redis客户端(您称之为“表”)。

看起来与此类似:

var redis = require("redis");
var client1 = redis.createClient(6379, '127.0.0.1');
var client2 = redis.createClient(6379, '127.0.0.1');

client1.select(2, function(err){
    console.log('client 1 is using database 2');
});

client2.select(4, function(err){
    console.log('client 2 is using database 4');
});

然后,无论您的读/写逻辑在哪里,您只需使用适当的客户端:

client1.set("someKey", "teacherID", function(err){
    // ...
});

client2.set("someKey", "studentID", function(err){
    // ...
});

显然,您可以将上述内容封装到具有回调的函数中,嵌套操作,使用一些异步库等,以使其执行您需要执行的任何操作。如果您需要将值从数据库2传输到数据库4,则可以执行简单的client1.get()client2.set()