2011-08-25 117 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