У меня есть существующий веб-сервис PHP, который используется для выполнения сложных вычислений, выполнение которых занимает около 10 секунд. Конкретный шаблон использования клиента состоит в том, что несколько клиентов почти всегда запрашивают один и тот же расчет в течение 10-секундного окна.
В данный момент мы просто позволяем всем работать в параллельном режиме. Очевидно, что это дорого и не нужно, поэтому ищем самый простой способ предотвращения этого обычного кеша.
Теоретически, мы хотели бы просто выполнить первый запрос клиента и вычислить результат, а затем поместить вычисленный результат в кэш. Если последующие клиентские запросы приходят и ищут этот результат:
а) Если результат уже кэширован - Отлично!
б) Если результат еще не кэширован, но обрабатывается, дождитесь его появления в кэше, прежде чем возвращать это значение клиенту.
Я подготовил несколько разных подходов, но мне было бы очень интересно услышать любые практические советы или рекомендации, которые помогут принять решение о самом простом и наиболее надежном подходе.
Мы еще не приняли решение о кеше, поэтому также открыты для предложений по использованию кеша. Громкость низкая, поэтому в памяти все в порядке. Существуют ли какие-либо реализации кеша, которые фактически позаботятся о проблеме и заблокируют чтение кеша, когда другой поток фактически работает над заполнением записи в кеш?
Кэширование - это правильно? Стоит ли вместо этого использовать очередь?!
Буду очень признателен за любые мысли или советы, основанные на практическом опыте.