Как (повторно) использовать клиентские соединения redis в nodejs/express?

Приведем простой пример:

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 ответа

Решение

Вам нужно только одно подключение к Redis для вашего сервера, и вам нужно только закрыть его, если ваш сервер когда-либо останавливается. Ваш сервер просто работает как один процесс.

Ответ на сообщение пула подключений воплощения:

Привет - первое уточнение, сервер Redis IS однопоточный.

То, что вы видите с точки зрения упорядочивания команд, является артефактом того, как вы используете асинхронность, и не связано ни с библиотекой node_redis, ни с самим Redis.

Пул соединений с node_redis определенно не требуется. Вы, конечно, можете использовать его, но это не рекомендуется. Пул соединений снизит эффективность конвейеризации Redis, и из-за состояния протокола Redis может быть проблематичным с некоторыми командами.

Причина № 1: Я не уверен, что это важно или, возможно, хуже, создавая дополнительных клиентов, которые являются дополнительным бременем GC.

Причина № 2: Это не совсем так. Сервер Redis является однопоточным. Если вы ожидаете на сервере, все клиенты ожидают на сервере. Если вы заблокированы в javascript, все клиенты в этом процессе заблокированы в javascript.

Причина № 3: Библиотека node_redis уже переподключается после сбоев.

Вам не нужно открывать и закрывать соединение при каждом запросе.

В вашем примере, даже если запросы будут обрабатываться асинхронно, обратный вызов всегда будет выполняться в правильном контексте. Но вы должны быть осторожны с неатомарными транзакциями, потому что они могут испортить вашу базу данных. используйте MULTI Command, чтобы знать об этом

Другие вопросы по тегам