2013-12-09 2 views
0

Из документации видно, что я должен использовать multi для запросов redis в цикле или в часто называемых событиях или функциях.Модификация Redis для использования

Пример формы документы:

var redis = require("redis"), 
    client = redis.createClient(), multi; 

// start a separate multi command queue 
multi = client.multi(); 
multi.incr("incr thing", redis.print); 
multi.incr("incr other thing", redis.print); 

// runs immediately 
client.mset("incr thing", 100, "incr other thing", 1, redis.print); 

// drains multi queue and runs atomically 
multi.exec(function (err, replies) { 
    console.log(replies); // 101, 2 
}); 

// you can re-run the same transaction if you like 
multi.exec(function (err, replies) { 
    console.log(replies); // 102, 3 
    client.quit(); 
}); 

1) Почему я должен это делать?

2) Если я вызываю функцию только один раз для запроса пользователя (например, в веб-приложении), почему я не должен использовать multi?

+0

его в основном асинхронном поведение в «node.js» части, см 'модуль async', чтобы понять, почему асинхронная является обязательным, и спасатель во многих ситуациях,' multi', как Redis команда Гивенс возможности для запуска нескольких команд с одним входом. – Gntem

ответ

1

Вы должны использовать несколько, потому что:

  • открывает транзакцию Redis: все запросы будут обрабатываться один за другим без других запросов, отправленных с другим клиентом Redis выполняются между (мульти атомарный)
  • Полученные данные не находятся в неправильном состоянии, и многие из них могут изменить значение redis во время выполнения вашего цикла: вы можете получить странные данные, которые не имеют никакого значения в действительности!
  • Все команды запущены или отсутствуют: если вы потеряете соединение во время выполнения вашего цикла, вы могли бы произвести повреждение данных, поскольку, возможно, запрос на запись значения не имеет смысла без написания другого (что могло бы потерпели неудачу из-за того, что не использовали мульти).
Смежные вопросы