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