Существует ли блокирующая библиотека redis для node.js? - PullRequest
0 голосов
/ 23 мая 2011

Redis очень быстрый.По большей части на моей машине это так же быстро, как, скажем, нативные операторы Javascript или вызовы функций в node.js.Писать обычный код Javascript в node.js легко / безболезненно, поскольку не требуется никаких обратных вызовов.Я не понимаю, почему не так просто получить / установить данные ключа / значения в Redis с помощью node.js.

Если предположить, что node.js и Redis находятся на одном компьютере, существуют ли какие-либо библиотеки npm, которые позволяют взаимодействовать с Redis на node.js с помощью блокирующих вызовов?Я знаю, что это должна быть библиотека C / C ++, взаимодействующая с V8.

Ответы [ 4 ]

11 голосов
/ 24 мая 2011

Полагаю, вы хотите убедиться, что все операции вставки Redis были выполнены. Для этого вы можете использовать команды MULTI для вставки ключей или выполнения других операций. Модуль https://github.com/mranney/node_redis ставит в очередь команды, помещенные в мультиобъект, и выполняет их соответствующим образом.

Таким образом, вам требуется только один обратный вызов в конце вызова exec.

10 голосов
/ 23 июня 2012

Это похоже на обычную медвежью ловушку для разработчиков, которые пытаются привыкнуть к четной модели программирования Node.

Что происходит так: вы попадаете в ситуацию, когда шаблон асинхронного / обратного вызова не подходит, вы понимаете, что вам нужен какой-то способ блокирования кода, вы спрашиваете Google / StackExchange о блокировке в Node, и все, что вы получите, это предупреждение о том, как плохо блокировать.

Они правы - блокировка («дождитесь результата этого, прежде чем делать что-либо еще»), это не то, что вы должны попытаться сделать в Node. Но то, что я считаю более полезным, это осознать, что в 99,9% случаев вы на самом деле не ищете способ сделать блокировку, вы просто ищете способ сделать свое приложение ", дождитесь результата этого прежде чем делать это ", что не совсем то же самое.

Попробуйте рассмотреть идею «управления потоком» в Node, а не «блокировать» некоторые шаблоны проектирования, которые могли бы более точно соответствовать тому, что вы пытаетесь сделать. Вот список библиотек для проверки:

https://github.com/joyent/node/wiki/modules#wiki-async-flow

Я тоже новичок в Node, но я действительно копаю Async: https://github.com/caolan/async

6 голосов
/ 23 мая 2011

Код блокировки создает узкое место MASSIVE .

Если вы используете код блокировки, ваш сервер станет НЕВЕРОЯТНО медленным.

Помните, что узел является однопоточным. Таким образом, любой код блокировки будет блокировать узел для каждого подключенного клиента.

Ваш собственный тест показывает, что он достаточно быстр для одного клиента. Вы сравнили это с 1000 клиентов? Если вы попробуете это, вы поймете, почему код блокировки плох

0 голосов
/ 23 мая 2011

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

Единственный способ, которым, я думаю, вы могли бы (и не предлагайте этого) добиться этого, используя обратный вызов с переменной, которая является предикатом для выхода из таймера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...