faiwer
@faiwer
frontend-developer

NodeJS & Lock & Race?

Как я могу дёшево организовать подобное? С учётом того, что локировка должна работать в пределах сервера (поднято несколько instance's).

await this.lock(token /* str */);
// ... some code
await this.unlock(token);

Т.е. мне нужен удобный в использовании механизм аля Serializable-транзакции в рамках одного сервера.

Первоначально хотел для этого использовать memcached, но после беглого поиска наткнулся на информацию о том, что он для таких вещей не предназначен. Затем посмотрел в сторону транзакций "Serializable" в PostrgeSQL, но я хочу более скоростное и простое решение. Мысли крутятся вокруг нативных файловых локировок.
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
kirill89
@kirill89
У нас для таких целей обычно используется Redis. У них в документации есть алгоритм.

Простейший вариант без expire:

redis.setnx(token, 'lock', function (err, acquired) {
  if (err) { /*...*/ }
  if (acquired) {
    // ... some code
    redis.del(token, function (err) { /*...*/ }); // unlock
  }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы