0

我有点困惑。
我想根据 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);
4

1 回答 1

1

一个key只能获取一种类型,这里定义key为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);
    });
}
于 2013-06-08T13:10:24.120 回答