Replying to incarnate's connection pool post:
Hi there -- first clarification, Redis server IS single-threaded.
What you're seeing in terms of command ordering is an artifact of the way you're using async, and unrelated to either node_redis library or Redis itself.
Connection pooling with node_redis is definitely not required. You can certainly use it, but it is not suggested. Connection pooling will reduce the effectiveness of Redis pipelining, and due to the stateful nature of the Redis protocol, can be problematic with some commands.
Reason #1: I'm not sure this is significant, or possibly worse by creating additional clients which are an additional GC burden.
Reason #2: That's not really how it works. The Redis server is single-threaded. If you're waiting on the server, all clients are waiting on the server. If you're blocked in javascript, all clients in that process are blocked in javascript.
Reason #3: The node_redis library already reconnects after failures.