2011-08-25 118 views
1

我找到了一些redis nio客戶端。
只要有響應就將命令放入隊列中,
解析響應並將結果附加到第一個隊列元素。redis nio客戶端如何工作?

例如:

get(K key){ 
    Command cmd = new GetCommand(); 
    queue.put(cmd); 
    send(cmd); 
} 
//invoked while any data receive from server 
onReceive(Response res){ 
    queue.take().setResult(parse(res)); 
} 

服務器可以保證與相同的序列請求被髮送回的響應與發送的?
或者它只是因爲redis服務器使用一個線程來處理請求?我可以在其他情況下使用這種方法嗎?

+1

您應該檢查這個客戶端的文檔,如果真的有保證的響應都以相同的順序。 – Thilo

+0

我沒有發現有關我的問題的文檔。 – jilen

回答

2

這會起作用,但您確實需要對這類事情非常小心。在從單個線程調用的順序發送命令的單個連接上,您將按順序獲得響應。

如果您有多個線程訪問同一個連接或在同一個隊列上使用多個連接,匹配對請求的響應會變得更加複雜。

爲了什麼,我認爲具體情況您正在使用的客戶端,我發現了一個職位,可以更直接地回答你的問題:

生菜是建立在頂部的可擴展的線程安全客戶端優秀的 netty框架。多個線程可共享單個連接,因爲它們避免了阻塞和事務操作,並且多個 連接使用NIO選擇器進行有效管理。 內部生菜是完全異步的,它公開了 同步和異步接口以及異步 pub/sub回調。

http://groups.google.com/group/redis-db/browse_thread/thread/fa05f025c9213ddf