Node.js开发环境下,从MySQL读取数据,将MySQL不同表中的数据缓存至redis中不同的库中,代码如下:
// 初始化应用信息
var init_app_info = function(mysql, redis, config) {
mysql.query('select * from bg_app_info', null,{logging:false,plain:false,raw:true}).success(function(res){
if(res.length > 0) {
res.forEach(function(app){
var redis_app_info = 'AppInfo:' + app.id;
var redis_app_key = 'AppKey:' + app.appkey;
redis.select('1', function(){
redis.hmset(redis_app_info, app);
redis.del(redis_app_key, function(){
redis.set(redis_app_key, app.id);
});
});
});
}
});
}
// 初始化广告投放关键字
var init_ad_keyword = function(mysql, redis, config) {
mysql.query('select*frombg_ad_keyword',null{logging:false,plain:false,raw:true}).success(function(res){
if(res.length > 0) {
res.forEach(function(info){
redis.select('2', function(){
var redisKey = 'adkeywordadid:' + info.ad_id;
redis.lpush(redisKey, info.keyword);
});
});
}
});
}
以上代码在同一个脚本中,运行该脚本,发现数据并没有按要求写入指定的redis库中,而是出现交叉存放。现在想请教如何解决以实现最初的要求。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
流程问题你的redis 是全局变量..
你目前的情况是:
同步的过程:
redis 1 <-> redis 2
异步回调使用的对象:
callback -> redis 2 or redis1 ?(没有维护好对象状态)
要解决这个问题,最简单就是建两个redis 选择不同的库..要不就是,先set好redis1 再去set redis2
对了,查mysql的是异步的,根据回调的情况,全局redis的状态是在不断的变化..
评论
全部评论 (0)