mranney / node_redis源代码阅读

来源:互联网 发布:java里的反射 编辑:程序博客网 时间:2024/05/29 10:29

 

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请求,功能相同。

原创粉丝点击