2012-09-10 30 views
2

假設我每秒有100個請求,並且對於每個查詢,都需要提取一個哈希值,然後需要更新相同的哈希類似於:Redis是否會爲大量請求排隊hset命令?

redis.hget'value','user -123' redis.hset'value','user-123',JSON.generate({:number_of_visits => 15})

如果每秒鐘有很多讀/寫操作會發生什麼?

redis是否會將hget和hset命令排隊,它們都會按順序執行?它會減慢hgets更多的命令進來嗎?

+0

Redis的方式非常快;在正常情況下,它可以輕鬆處理每秒數千條命令,除了實際的網絡延遲(即將命令發送到redis實例並返回所需的時間)之外,沒有任何問題,因此在這種情況下,您描述的將會很好。 – Mahn

回答

3

Redis使用單線程來處理命令,因此命令將按照它們到達的順序進行處理。

一些文檔here

在它的根,Redis是一個單線程的服務器。這意味着單線程使用基於事件的範例 (如epoll,kqueue和select)讀取傳入連接。當某個特定事件發生在 文件描述符上時,它會處理它們並回寫響應。這UML 序列圖顯示瞭如何通過一個客戶端接收的命令由Redis的處理 內部:

如果你的速度快於Redis的能夠處理它們發送命令,該命令將在Redis的隊列中,和客戶端當他們等待他們的命令被出列和處理時,會看到增加的延遲。這會影響hset和hget命令。

+3

實際上,如果您使用流量使Redis飽和,它將在套接字緩衝區中排隊,而不是在Redis本身中排隊。當套接字緩衝區已滿時,TCP流量控制將使客戶端變慢。如果Redis將傳入流量完全排隊,那將是一個嚴重的漏洞(飽和情況下內存爆炸)。 –