Redis通过Node.js上的套接字连接

时间:2012-08-29 11:44:24

标签: sockets node.js redis

由于共享托管,目标主机上的redis服务器不能在端口上运行,而是在非常特定的套接字上运行,该套接字可以通过套接字文件连接,只能由我的用户访问。

但是,我还没有找到如何通过node_redisconnect-redis包中的套接字来指定连接,我想要使用它们。

任何人都知道怎么做?

2 个答案:

答案 0 :(得分:3)

更新:我的回答不正确。事实证明,我在下面提到的问题中的解决方案实际上仍然有效。这更像是巧合,IMO,但你可以做这样的事情,它应该有效:

var redis = require('redis'),
    client = redis.createClient('/tmp/redis.sock');

从下面的代码段中可以看出,这将传递给net.createConnection,它将连接到unix socket /tmp/redis.sock

旧回答:

有一个关于此node_redis/issues/204的已关闭问题。据认为,底层node.js net.createConnection API已经发生了变化。看起来它似乎是node_redis'exports.createClient函数中的一个非常小的修复:

exports.createClient = function (port_arg, host_arg, options) {
    var port = port_arg || default_port,
        host = host_arg || default_host,
        redis_client, net_client;

    net_client = net.createConnection(port, host);

    redis_client = new RedisClient(net_client, options);

    redis_client.port = port;
    redis_client.host = host;

    return redis_client;
};

似乎net.createConnection将尝试连接到unix套接字,如果它使用一个参数调用,它看起来像一个路径。我建议你实现修复并发送拉取请求,因为这似乎值得支持。

答案 1 :(得分:0)

不再有connect string ...

var client = redis.createClient(9000); // Open a port on localhost
var client = redis.createClient('/tmp/redis.sock'); // Open a unix socket
var client = redis.createClient(9000, 'example.com'); 

这个和选项记录在README