@Counter

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

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

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

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

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

Похожие вопросы