如何(重新)在nodejs / express中使用redis客户端连接?

时间:2013-04-30 08:14:21

标签: node.js node-redis

举个简单的例子:

var express = require("express")
var redis = require('redis')
var app = express()

var client = redis.createClient()

app.get('/', function(req, res) {
    req.connection.setTimeout(2 * 1000)
    client.set("test", 1, function (err, resp) {
        res.send('Hello World')
    })
})

app.listen(80)

不需要为每个请求重新建立Redis连接,是吗?

您需要使用redis连接池吗?

3 个答案:

答案 0 :(得分:6)

回复化身的连接池帖子:

您好 - 首先澄清,Redis服务器 IS 是单线程的。

您在命令排序方面看到的是您使用异步方式的工件,与node_redis库或Redis本身无关。

与node_redis的连接池绝对不是必需的。你当然可以使用它,但不建议使用它。连接池将降低Redis流水线的有效性,并且由于Redis协议的状态特性,某些命令可能会出现问题。

原因#1 :我不确定这是重要的,或者可能更糟糕的是创建额外的GC负担的其他客户端。

原因#2 :这不是真的如何运作。 Redis服务器是单线程的。如果您在服务器上等待,则所有客户端都在服务器上等待。如果您在javascript中被阻止,则该进程中的所有客户端都会被javascript阻止。

原因#3 :node_redis库在发生故障后已经重新连接。

答案 1 :(得分:4)

您的服务器只需要一次连接到redis,只需要在服务器停止时关闭它。您的服务器只是作为一个进程运行。

答案 2 :(得分:0)

您无需在每个请求上打开和关闭连接。

在您的示例中,即使请求处理异常,回调也始终在正确的上下文中被执行。 但是你应该小心非原子事务,因为它们会弄乱你的数据库。使用MULTI Command来了解这个