Я играю с node.js и redis и установил библиотеку hiredis с помощью этой команды
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
, что означает, что внутренний объект multi.queue никогда не очищается после завершения выполнения команд.
Мой вопрос: как бы вы справились с ситуацией в среде http?Например, отслеживание последнего подключенного пользователя (на самом деле это не требует multi, поскольку он просто выполняет одну команду, но за ним легко следить)
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.