开发者社区> 问答> 正文

node.js下操作redis问题窜库问题

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库中,而是出现交叉存放。现在想请教如何解决以实现最初的要求。

展开
收起
落地花开啦 2016-02-06 15:04:22 3154 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    流程问题你的redis 是全局变量..
    你目前的情况是:
    同步的过程:
    redis 1 <-> redis 2
    异步回调使用的对象:
    callback -> redis 2 or redis1 ?(没有维护好对象状态)
    要解决这个问题,最简单就是建两个redis 选择不同的库..要不就是,先set好redis1 再去set redis2
    对了,查mysql的是异步的,根据回调的情况,全局redis的状态是在不断的变化..

    2019-07-17 18:38:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
探究 Node.js 的服务端之路 立即下载
个推微服务实践 基于OpenResty 和Node.js 立即下载
沪江基于Node.js大规模应用实践 立即下载