将我的日志存储到REDIS

时间:2013-06-08 11:51:44

标签: node.js redis

我有点困惑。
我想根据SL和HOST过滤我的记录 我希望得到日​​期范围内的记录 我想我无法理解SADD和ZADD的使用。

我的代码喜欢这个:

console.log("sl:"+req.params.sl+" | host:"+req.params.host+" | source:"+req.params.source+" | date:"+req.body.date+" | title:"+req.body.title+" | details:"+req.body.details);
var key="log"+req.body.date;
redis_client.hmset(key,{"date":req.body.date,"title":req.body.title,"details":req.body.details,"sl":req.params.sl,"source":req.params.source,"host":req.params.host});
redis_client.sadd(key,"host",req.params.host,redis.print);
redis_client.sadd(key,"sl",req.params.host,redis.print);
redis_client.zadd(key,"date",req.body.date,redis.print);

1 个答案:

答案 0 :(得分:1)

一个键只能获得一种类型,在这里你可以将键定义为hash,set和zset

尝试使用过滤数据构建密钥名称

因为您需要获取日期范围内的记录,白天使用单个列表键并且主机可能是相关的

var entry = {
    date:req.body.date,
    title:req.body.title,
    details:req.body.details,
    sl:req.params.sl,
    source:req.params.source,
    host:req.params.host
}

var key = 'mylog:'+req.params.host+':'+currentDay;

redis_client.rpush(key,entry);
redis_client.expire(key,30*24*60*60); // expire in one month

捕获任何主机的特定日期的所有条目只需使用 lrange 命令

function getLog(host,day,callback){
    redis_client.lrange('mylog:'+host+':'+day,0,-1,callback);
}

您可以使用 keys 命令使用通配符过滤密钥(在生产密钥中这样做很慢!)

function getLogDay(day,callback){
    redis_client.keys('mylog:*:'+day,function(keys){
        var multi = redis_client.multi(); // check your redis client real syntax
        // loop on result keys to get them all
        for(var n=0;n<keys.length;n++)
            multi.lrange(keys[n],0,-1);
        multi.exec(callback);
    });
}