Я играл с Node.js и Redis и установили библиотеку hiredis с помощью этой командыNode.js (Привет) Redis и нескольких команд
npm install hiredis redis
Я посмотрел на нескольких примерах здесь:
https://github.com/mranney/node_redis/blob/master/examples/multi2.js
в строке 17 он говорит
// you can re-run the same transaction if you like
, который предполагает, что межд Объект ernal multi.queue никогда не очищается после завершения выполнения команд.
Мой вопрос: как бы вы справились с ситуацией в среде http? Например, отслеживание последнего подключенного пользователя (это на самом деле не нужно много, как он просто выполняет одну команду, но это легко следовать)
var http = require('http');
redis = require('redis');
client = redis.createClient()
multi = client.multi();
http.createServer(function (request, response) {
multi.set('lastconnected', request.ip); // won't work, just an example
multi.exec(function(err, replies) {
console.log(replies);
});
});
В этом случае multi.exec бы выполнить 1 транзакцию для первого подключен пользователь и 100 транзакций для 100-го пользователя (поскольку внутренний объект multi.queue никогда не очищается).
Вариант 1: Должен ли я создать многомерный объект внутри функции обратного вызова http.createServer, что бы эффективно убить его в конце выполнения функции? Насколько дорогостоящим с точки зрения циклов ЦП было бы создание и уничтожение этого объекта?
Вариант 2: Другой вариант был бы создать новую версию multi.exec(), что-то вроде multi.execAndClear(), который будет очистить очередь моментного Redis выполнен , что кучу команд.
Какой вариант вы бы взяли? Я полагаю, что вариант 1 лучше - мы убиваем один объект, а не вишневые части его - я просто хочу быть уверенным, что я новичок как на узле, так и на javascript.
не могли бы вы объяснить это на примере? –
То же пояснение. В документации говорится, что она истощает очередь. Учитывая, что вы можете повторно запустить exec и повторить его, это очень запутанно. – maletor