2011-05-10 40 views

回答

39

當涉及到像BLPOP那樣的阻塞命令或者監聽Pub/Sub通道時,您需要一個異步客戶端,如tornado-redis您可以從this demo開始,瞭解tornado-redis客戶端如何用於開發簡單的公共聊天應用程序。

但我會建議使用結合同步redis-py客戶端hiredis大多數其他案件。

異步客戶端的主要優點是,您的服務器可以處理傳入的請求,同時等待Redis的服務器響應。但是,Redis服務器速度如此之快,以至於在大多數情況下,在您的Tornado應用程序中設置異步回調的開銷會增加請求處理的總時間,然後增加等待Redis服務器響應的時間。

使用異步客戶端可以嘗試同時向Redis服務器發送多個請求,但Redis服務器是一個單線程服務器(就像Tornado服務器一樣),因此它將一次性響應這些請求,你會得到幾乎沒有。事實上,只要存在管道和命令(如MGET/MSET),則不必同時向相同的Redis服務器發送多個Redis命令。我建議使用同步(redis-py)客戶端和twemproxythis one(後者支持管道傳輸和MGET/MSET命令)等代理服務器。

另外,我建議在使用Redis-py客戶端的Tornado應用程序時不要使用連接池。只需爲您的應用程序連接到的每個Redis數據庫創建一個單一的Redis對象實例。

+2

事實上,使用同步客戶端對於普通情況聽起來沒問題,但最糟糕的情況可能不會被接受!示例1:如果Redis掛起或網絡到Redis速度較慢,則會掛起您的Tornado應用程序。示例2:在客戶機上序列化請求並在服務器上進行序列化僅在網絡延遲爲0的情況下才是等效的,這幾乎從不是這種情況。 – 2014-05-26 17:54:55

+0

龍捲風不再被維護。但存儲庫提供了一些替代方法:https://github.com/aio-libs/aioredis和https://github.com/mrjoes/toredis – matyas 2018-03-02 19:51:31

8

我會建議使用brukva這是一個「異步Redis的客戶龍捲風IO環路內的作品」。

+11

爲防萬一誰在這篇文章中發現了錯誤,我認爲最新的異步redis庫現在是tornadoredis https://github.com/leporo/tornado-redis – 2012-06-27 17:27:47