Snorway
@Snorway

Какой тип мьютекса использовать?

В Yii2 из коробки есть два типа мьютексов: FileMutex и MysqlMutex.
Первый лочит с помощью flock(), второй с помощью GET_LOCK. Вопрос, в каких случаях предпочтительнее использовать каждый тип лока? Ведь, насколько я понял, и первый, и второй решают одну проблему и приводят к одному результату.
  • Вопрос задан
  • 368 просмотров
Решения вопроса 1
@justpusher
Если все процессы на одном сервере - лучше использовать flock, он проще и надёжнее.
Например, в случае рестарта mysql или потери соединения с ним по другой причине - вы теряете блокировку, полученную GET_LOCK, но можете про это и не узнать.
Если же вам нужно получать блокировки на разных серверах, то GET_LOCK может выручить. Но внимательно ознакомьтесь с подводными камнями. Например, в старых версиях mysql повторный вызов GET_LOCK отменяет предыдущие блокировки, а в новых - получает новые блокировки параллельно.

P.S. если вам блокировка нужна для выполнения простых действий в таблице, типа выборки нового задания для обработки, используйте SELECT FOR UPDATE.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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