使用Redis + Node.js的数据库体系结构

时间:2011-01-20 11:06:20

标签: database-design nosql node.js redis

根据其他一些SO问题,我正在开发一个网站监控应用程序作为宠物项目,目的是了解有关Node.js + Redis的更多信息。

我计划的是让用户添加网址并将其添加到Redis SET。每分钟,我都会得到SET结果,执行HTTP Get请求并打印响应。

这似乎工作正常,但是,我有几个问题:

  1. 鉴于Redis SET不允许重复键(这将使我无法对同一URL请求),如何控制用户何时从其帐户中删除URL但另一个用户具有相同的URL ? 我可以在网址密钥中使用INCR值,以便知道有多少用户在其帐户中拥有该网址吗?

  2. 鉴于我每分钟都做一次HTTP请求,我想使用Redis保存结果(响应时间,上/下等),在Redis中保存所有数据的最佳方法是什么(每分钟对每个网址的请求结果)?我应该用一个独特的Redis密钥保存每个响应吗?

  3. 为了向用户实时显示结果,查询结果并实时解析结果的最佳方法是什么?

  4. 感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

我认为你应该开始在redis-cli中编写原型。另外,我想从Simon Willison explaining redis中指出这篇非常好的文章。

  

鉴于Redis SET不允许   重复的键(这将拯救我   如何对同一URL做请求)   在用户删除时控制   来自他的帐户但其他用户的网址   有相同的URL?我可以有INCR吗?   URL键中的值,所以我知道如何   很多用户都有自己的网址   帐户?

我会使用SADD + INCR

SADD urls http://www.google.com
INCR http://www.google.com

要删除http://www.google.com我只会这样做:

DECR http://www.google.com
#Only if DECR http://www.google.com => 0, then you should remove from SET
SREM urls http://www.google.com 
  

鉴于我每次都做一个HTTP请求   分钟,我想用Redis来保存   结果(响应时间,上/下,   等等,什么是拯救所有人的最好方法   Redis中的数据(来自   每分钟都要求每个网址?

我会为每个网址使用唯一的密钥,并使用MSET将数据作为json(JSON.stringify(obj))写回redis。

MSET data:http://www.google.com "{json for google}" data:http://www.yahoo.com "{json for yahoo}"
  

为了向用户显示结果   实时,最好的方法是什么   查询结果并解析它   实时?

我会通过MGET获得结果并解析json(obj = JSON.parse(json-string))。