我正在努力解决一个阻碍我一个月的问题
我使用 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共享代码,我也可以确保逻辑编码正确)
答案 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()
。