2011-01-20 48 views
4

继其他一些SO问题之后,我开发了一个网站监控应用程序作为一个宠物项目,目的是更多地了解Node.js + Redis。使用Redis + Node.js的数据库体系结构

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

这似乎很好地工作,但是,我有几个问题:

  1. 鉴于Redis的SET不允许重复键(这将节省我做相同的URL的请求),如何控制用户何时从他的帐户中移除网址,但是其他用户是否拥有相同的网址? 我可以在URL密钥中使用INCR值,因此我知道有多少用户在其帐户中拥有该网址?

  2. 既然我做了一个HTTP请求,每分钟,我想使用Redis的保存结果(响应时间,上升/下降等),什么是保存在Redis的所有数据(结果的最佳方式从请求到每个网址每分钟)?我应该将每个响应保存在一个唯一的Redis密钥中吗?

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

感谢您的帮助。

回答

5

我认为你应该从redis-cli开始写原型。我也想指出这个非常好的文章,从Simon Willison explaining redis

鉴于Redis的SET不允许 重复键(这将节省我从 做相同的URL的请求),如何 如何控制当用户从他的帐户,但其他用户的 网址 具有相同的URL?我可以在URL中使用INCR 值,因此我知道 许多用户的 帐户中有哪些网址?

我会用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中保存所有 数据的最佳方式是什么(每分钟向每个url请求 的结果)?

我会用所有网址的唯一密钥和数据的使用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))。

+0

好的!这很有道理!谢谢!只有一个问题很难,你需要将新的结果追加到JSON中。这是最好的解决方案吗?一旦JSON文件变得庞大,是否没有缩放问题?你能详细说明一点吗?我有很少使用JS/JSON的经验。谢谢阿尔弗雷德! ;) – donald 2011-01-20 18:47:40