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

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

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

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

  1. 鉴于Redis SET不允许重复键(这将使我无法再请求到同一个URL),但是如何控制用户从他的帐户中删除URL但其他用户具有相同的URL? 我可以在URL中使用INCR值吗?我知道有多less用户在他们的帐户中有URL?

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

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

谢谢您的帮助。

我认为你应该开始在redis-cli编写原型。 我还想指出Simon Willison解释redis的这篇很好的文章。

鉴于Redis SET不允许重复键(这将使我无法再请求到同一个URL),但是如何控制用户从他的帐户中删除URL但其他用户具有相同的URL? 我可以在URL中使用INCR值吗?我知道有多less用户在他们的帐户中有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中保存所有数据的最佳方式是什么分钟)?

我将为每个URL使用唯一的密钥,并使用MSET将数据写回到redis( JSON.stringify(obj) )。

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

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

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