[英]Redis: Wrong data in wrong tables
我正在尝试解决一个已经困扰我一个月的问题
我正在使用Node.js和Redis扩展应用程序的后端,由于我们的结构,我们必须将数据从一个 Redis 表传输到另一个
我们在几秒钟内收到了很多请求,并做出了很多响应,无论我做了多少尝试, 我都无法阻止数据混杂 。 假设我们有一个“ 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
}
});
我不能简单地阻止这种混乱的原因可能是什么? 让我抓狂的一个细节是,它在本地和在线上都非常有效,但是每当有多个请求到达服务器时,它就会变得混乱。 有什么建议可以防止此错误?
对于您是否必须“将数据从一个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()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.