Обычно вы пытаетесь кешировать запросы к базе данных. К тому времени, когда вы приступите к использованию кэша, состояние базы данных может измениться. Это рецепт для несоответствия данных.
В качестве альтернативы проверьте, можете ли вы оптимизировать базу данных. Очень возможно, чтобы база данных отвечала на запросы в течение
В качестве другой альтернативы рассмотрите следующее: общий объем работы не уменьшается при предварительной выборке данных. Сущность должна ждать предварительной выборки, вне зависимости от того, находится она в очереди или нет. Так как работа должна быть выполнена в любом случае, вы могли бы также сделать это в рабочем процессе очереди? Подумайте об увеличении количества рабочих процессов, чтобы вы могли обрабатывать больше очередей одновременно.
РЕДАКТИРОВАТЬ: Как ваш комментарий говорит, что вы связаны с одним рабочим потоком:
- Может быть, разделить обработку на два этапа? Первый процесс извлекает данные базы данных и сохраняет обогащенную сущность в новой очереди. Второй процесс читает из новой очереди и выполняет работу с другими источниками данных в памяти
- Защита других объектов в памяти глобальным мьютексом. Это означает, что многие рабочие потоки могут общаться с базой данных, в то время как только один может обращаться к другим объектам в памяти.