redis - a node.js redis client
mranney / node_redis
This is a complete Redis client for node.js. It supports all Redis commands, including MULTI, WATCH, and PUBLISH/SUBSCRIBE.
node_redis的源代码大概可以分为三个主要部分:
- 经常被使用的util函数,分别是Queue(lib/queue.js), to_array(lib/to_array.js)
queue.js主要是构造一个Queue,发送给redis的命令是放在Queue中的,主要由两种类型的queue,一个是offline_queue;另外一个是command_queue, offline_queue是在连接还没有准备好的情况下发送的命令会存放在这里,那么当连接ready以后,会将其中的command全部发送给redis;command_queue则是没次发送给redis的命令同时也会存放在这里,当返回成功的时候再将command从其中移除出去。
to_array.js则是一个数组的深拷贝,下面是它的源代码:
这里我不想说to_array是如何实现的,因为它很简单,而是想提一下"module.exports = to_array", 通过这种方式exports以后,
我们就可以这样使用它了:
- 用来解析redis返回的数据的parser
parser主要由两种实现,一种是javascript.js(/lib/parser/javascript.js);另外一个是hiredis.js(/lib/parser/hiredis.js),默认使用的javascript.js来解析返回的数据,但是hiredis.js的性能更好些。
JavaScript parser:
hiredis parser:
- 最后出场的当然是核心模块,管理redis命令(保存command、发送command、处理reply)
对index.js的源代码加了一些注释,可以沿着两天主要的线走,一是和redis打交道的接口,看它是如何处理事件 connect, data, end, timeout, drain, error, close的,另外则是和node-redis使用者打交道的接口,看它是如何处理redis命令的。
在node-redis首页里面已经给出了很多关于node-redis的信息,从如何使用它、benchmark测试、事件API、一些特俗的命令的解释(hgetall, hmset)、pub/sub和monitor的介绍、node-redis的一些状态信息和通用回调函数(redis.print)。
需要注意的两个问题:
关于使用node-redis的redis命令接口,传入的参数有三种情况(目前只有mgetall和hmset支持object参数情况):
- 独立的参数
- 数组
- 对象
可以直接调用client.set, client.get (client.REDIS_CMD)来向redis来请求,也可以直接使用client.send_command来向redis请求,功能相同。