Заказ закрыт
Скрипт на Lua для Redis

Откликнуться
f
Заказчик
Отзывы фрилансеров: + 11 - 0
Зарегистрирован на сайте 16 лет и 4 месяца
Бюджет: по договоренности
Суть задачи: от юзеров (user_id) приходят запросы (JSON) на web-server (php). 
Php пересылает их далее на обработку, но на данном этапе в рамках ОДНОГО пользователя необходимо сохранить очередность выполнения запросов (FIFO), а главное – не отправлять на обработку следующий запрос, пока полностью не завершится обработка предыдущего. Это именно в рамках одного пользователя, запросы разных пользователей как раз должны обрабатываться параллельно.
Для этих целей, как раз, думаю использовать Redis и, в идеале, два скрипта к нему на Lua, минимизирующие переброску данных туда-сюда (если так можно). Логика:

Скрипт 1:
- вызывается из PHP при получении нового запроса, в него передаются полностью данные запроса, + для оптимизации можно некоторые поля вытащить из json и передать как отдельные параметры;
- Скрипт проверяет наличие в Redis других необработанных (или находящихся в обработке запросов) для ЭТОГО user_id
- Если их нет – сохраняет у себя user_id, запрос_id и, может, еще одно-два поля к нему – т.е. помечает, что для данного user_id теперь есть запрос в обработке, и возвращает вызвавшему его php скрипту True 
= "можно отправлять в обработку"
- Если уже есть данные по этому user_id – сохраняет у себя весь запрос, и возвращает вызвавшему его php скрипту False = "отправлять в обработку нельзя"

Скрипт 2:
- вызывается при завершении обработки запроса пользователя. В него передается user_id и запрос_id
- Скрипт удаляет из данных Redis запись, соответствующую user_id и запрос_id
- Проверяет, не накопилось ли других запросов по этому user_id
- Если не накопилось – возвращает "ок, обработка завершена"
- Если есть ожидающие выполнения запросы от данного user_id – возвращает полные данные следующего запроса, который теперь пора отправить на обработку.

На всякий случай, уточню: Скрипт1 и Скрипт2 – должны работать ВНУТРИ Redis. Не нужно предлагать реализовать эту логику на php или чем-то еще (это я и сам напишу). 

Пока еще совершенно не знаком с redis-ом, и не уверен, что из php можно вызвать функцию/скрипт Редиса с параметром JSON и возвращаемым результатом тоже JSON. 
Если это таки невозможно, или предложенный вариант из разряда "так вообще никто никогда не делает" – предлагайте, как сделать лучше!
Вариант сделать это же с помощью нескольких запросов внутри одной транзакции – знаю, есть, но выглядит не лаконично.
Разделы:
Опубликован:
01.06.2023 | 16:53 [поднят: 01.06.2023 | 16:53]
Заказ находится в архиве
Откликнуться

Выберите способ верификации:

Обновите страницу после прохождения верификации.

Посмотреть другие заказы

Теги:

Наши партнеры
Сведения об ООО «Ваан» внесены в реестр аккредитованных организаций, осуществляющих деятельность в области информационных технологий. ООО «Ваан» осуществляет деятельность, связанную с использованием информационных технологий, по разработке компьютерного программного обеспечения, предоставлению доступа к программе для ЭВМ и является правообладателем программы для ЭВМ «Платформа FL.ru (версия 2.0)».