2013-02-05 45 views
3

我對Redis有點新,但我想看看它是否可用於跟蹤我正在創建的併發HTTP連接數。使用Redis來跟蹤併發出站HTTP請求

這裏的高層次計劃:

INCR requests 
// request begins 
HTTP.get(...) 
// request ends 
DECR.requests 

然後在任何時候,只要調用GET requests,看看有多少是當前打開的。

這裏的最終目標是阻止我的http請求保持低於一定的數量,比如說50個請求/秒。

這是正確的做法嗎?有沒有什麼陷阱?

回答

0

至於陷阱,我能看到的唯一一個服務器發生故障或失去與Redis中間連接的連接,可能永遠不會調用DECR

既然你不知道哪個服務器也哪個請求,你永遠無法復位計數到正確的值,而不使系統停止和重置爲0

+0

會過期的消息隊列會更好嗎?當連接開始時推送到隊列,當隊列結束時彈出隊列,如果消息超過60秒,則過期。要獲得併發連接,只需獲取隊列的大小即可。 – user94154

+0

@ user94154我不記得在Redis中過期的隊列消息是一個選項,但是,如果可能的話(自從我使用它以來已經是API版本或兩個版本),聽起來會更好。 –

0

我不清楚你」在這種情況下通過使用redis獲得。在我看來,在你的服務器中只使用一個全局變量會更合適。如果你的服務器出現故障,你的櫃檯也是如此,所以你不需要設置複雜的東西來處理斷開連接,不一致等問題。

+0

你假設我的請求來自單個服務器。這是Redis派上用場的教科書。 – user94154

+0

我只需要對每臺服務器進行節流,並相信負載平衡器可均勻分配請求。我不會擔心整個x請求/秒。簡單得多,沒有什麼可以出錯的。 –