4

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

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

有人知道该怎么做吗?

4

2 回答 2

4

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

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

正如您从下面的代码片段中看到的那样,这将被传递给net.createConnection将连接到 unix 套接字/tmp/redis.sock

老答案:

关于这个node_redis/issues/204有一个已解决的问题。似乎,认为底层的 node.js net.createConnection API 已经改变了。看起来这将是 node_redisexports.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 套接字,这看起来像一条路径。我建议您实施修复并发送拉取请求,因为这似乎值得支持。

于 2012-08-29T13:25:42.077 回答
-1

不再有连接字符串...

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中。

于 2015-04-29T06:44:30.357 回答