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

don*_*ald 4 database-design nosql redis node.js

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

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

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

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

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

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

谢谢您的帮助.

Alf*_*red 5

我想你应该开始编写原型redis-cli.另外,我想指出Simon Willison解释redis的这篇非常好的文章.

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

我会使用SADD + INCR.

SADD urls http://www.google.com
INCR http://www.google.com
Run Code Online (Sandbox Code Playgroud)

删除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 
Run Code Online (Sandbox Code Playgroud)

由于我做一个HTTP请求,每分钟,我想使用Redis的保存结果(响应时间,上升/下降等),什么是(保存所有的数据在Redis的从请求到每个URL结果的最佳方式每分钟)?

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

MSET data:http://www.google.com "{json for google}" data:http://www.yahoo.com "{json for yahoo}"
Run Code Online (Sandbox Code Playgroud)

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

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