@Counter

В чем правильно сохранить состояние выполнения?

Добрый день.
Есть скрипт который выполняется по веб-хуку с другого сервиса и делает определенные действия. Пользователь в запаре может 2 или 3 раза подряд за секунду отправить этот вебхук с одинаковыми параметрами. А выполнится данный скрипт может только один раз с одним и тем-же параметром вебхука все остальные попытки нужно отбраковывать. Нужно обязательно привязываться к id вебхука, так-как может друг за другом прилететь 2 разных вебхука и их нужно будет выполнить, а может прилететь 3 одинаковых. 2 из которых нужно будет отбраковать.

В голову приходит 2 варианта:
1. Записывать состояние в mysql и перед выполнение проверят запросом это состояние.
2. Записывать состояние в сессию и так-же проверять перед выполнением.
Состояние достаточно сохранить на 5 минут, дальше оно уже не нужно.

Подскажите, пожалуйста, варианты как это правильно реализовать?
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
Для таких целей очень удобно использовать memcache, сетите значение по уникальному ключу, например MY_KEY_ . id_user с TTL на 5 минут, перед выполнением проверяете, нет ли такого значения в кеше. По истечении ttl кеш сам убьет это значение. Базу данных для таких вещей дергать очень нецелесообразно и ресурсозатратно, особенно, если проект под нагрузкой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
chupacabramiamor
@chupacabramiamor
Инженегр-программист
3. Лочить кнопку на фронте, которая отправляет ваши данные по хуку, через JavaScript
4. В дополнение к п.3 - хоть и не обязательно, но можно использовать токен в форме, который инвалидируется после вашего запроса (CSRF)
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Zaymigo Нижний Новгород
от 20 000 до 100 000 руб.
HTML Academy Санкт-Петербург
от 130 000 до 140 000 руб.