我阅读了很多关于Redis的网络文章和指南,这些文章和指南都有很好的信息,但我找不到所有的游荡。由于我是全球Redis的新手,我开始收集信息继续前进,我有自己的应用案例,类似于SQL DB中如下所示的天气记录应用程序:
var notes = notesService.getAll().then(function(res){
var cleanArrayOfNotes = res.data;
//navCtrl line12
console.log(cleanArrayOfNotes);
return cleanArrayOfNotes;
});
//navCtrl line16
console.log(notes);
每个城市(cityID, sensorID, StartReadingTime, EndReadingTime, AverageValue)
都有许多传感器(cityID)
,可以读取温度值。
我在(sensorID)
上有复合键。
我的第一个问题是:在Redis中表示我的案例的最佳方式是什么? 哈希,列表,集等......
正如我在许多文章中所读到的那样,在将数据存储在Redis之前,我必须弄清楚我希望以后如何将其恢复,在其他世界中,我将运行哪些查询来检索数据。
我的案例有三个主要问题
1-基本选择(键查找)
(cityID,SensorID,StartReadingTime)
2-范围搜索
SELECT *
FROM weather
WHERE cityID = ?
AND sensorID= ?
AND StartReadingTime = ? ;
3-使用范围搜索进行聚合
SELECT *
FROM weather
WHERE AverageValue > ?
AND AverageValue < ?
如果您能为我的案例提供提示和指导,我将不胜感激,这将鼓励我继续使用Redis。
答案 0 :(得分:0)
请记住,每个查询可能需要不同的数据结构才能以最佳方式回答。在您的情况下,您需要维护两个数据结构。
1-基本选择(键查找)
将读数保持在哈希中,如下所示:
<city>:<sensor>
<start>
HGET <city>:<sensor> <start>
并拆分:
2-范围搜索
将读数保持在分类集中,如下所示:
averages
<avg>
<city>:<sensor>:<start>:<end>
ZRANGEBYSCORE averages <from avg> <to avg> and split the value on
:`3-使用范围搜索进行聚合
与2的逻辑相同,但由于您实际上并不需要计数值,因此您可以使用Lua代码段保存查询中的某些网络:
EVAL "local r = redis.call('ZRANGEBYSCORE', KEYS[1], ARGV[1], ARGV[2]) return #r" 1 averages <from avg> <to avg)