如何用Redis格式表示SQL表格式以进行查询?

时间:2015-07-28 09:24:34

标签: database redis

我阅读了很多关于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。

1 个答案:

答案 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)