redis 批量插入数据

  今天碰到一个需求 需要把大批的数据一次性插入到redis 并分批读出来 而且需要设定过期时间  查阅redis文档 最终找到了答案 要用到lpush 而lpush的数组对象里又要是字符串 为此 需要将大数组转换下  以下是实现方法 仅供参考

var  redis=require('redis') ;
var settings= {
    redis_host: '127.0.0.1',
    redis_port: 6379,
    redis_psd: '',
    redis_db: 0,
}

var _ = require('underscore');

//要插入的数据
var data = [
    settings,
    settings,
    settings
];

//处理数据
var data2 = _.map(data, function (item) {
    return JSON.stringify(item);
});


//连接redis
var client = redis.createClient(settings.redis_port, settings.redis_host);

//push数据
client.lpush('niefengjun.cn',data2)
client.expire('xiao', 30); //过期时间 单位秒
//查询数据
client.lrange('niefengjun.cn',0,4,function(err,result)
{
    console.log(err,result)
}
)

结果

[ '{"redis_host":"172.28.19.72","redis_port":6379,"redis_psd":"","redis_db":0}',
  '{"redis_host":"172.28.19.72","redis_port":6379,"redis_psd":"","redis_db":0}',
  '{"redis_host":"172.28.19.72","redis_port":6379,"redis_psd":"","redis_db":0}' ]
null [ '{"redis_host":"172.28.19.72","redis_port":6379,"redis_psd":"","redis_db":0}',
  '{"redis_host":"172.28.19.72","redis_port":6379,"redis_psd":"","redis_db":0}',
  '{"redis_host":"172.28.19.72","redis_port":6379,"redis_psd":"","redis_db":0}' ]


以上的方法 封装一下

var _ = require('underscore');
var redisconfig = require('../../config/redis.js').config;
var  redis=require('redis') ;
var Q = require('q');
/*
   key  key
   args  要存入的数据
   expire 过期时间
 */
function lpush(key, args, expire) {
    var client = redis.createClient(redisconfig.redis_port, redisconfig.redis_host);
    var args1 = _.map(args, function (item) {
        return JSON.stringify(item);
    });

    client.lpush(key, args1);
    client.expire(key, expire);
    return true;
}

function lrange(key, start,end) {
    var q = Q.defer();
    var client = redis.createClient(redisconfig.redis_port, redisconfig.redis_host);
    //LRANGE
    client.lrange(key, start,end, function (err, result) {
            if (!err) {
                q.resolve(result)
            }
            else {
                console.log('redis lrange读取,key=', key, err, result);
                q.resolve(err)
            }

        }
    )
    return q.promise;
}

exports.lpush = lpush;
exports.lrange = lrange;

调用

var key='user-11111' ;
var Q = require('q');
var args=[{niefengjun:'xiaonie'},{niefengjun:'xiaoding'},{niefengjun:'xiaowang'},{niefengjun:'.cn'}]
redis.lpush(key,args,30) ;

return redis.lrange(key,0,10).then(function(data)
{
    console.log(data)
}
)

  结果

bogon:test tom$ node redis.js 
[ '{"niefengjun":".cn"}',
  '{"niefengjun":"xiaowang"}',
  '{"niefengjun":"xiaoding"}',
  '{"niefengjun":"xiaonie"}' ]