2011-01-20 51 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