Вот краткое описание того, что происходит -Подождите один из многих параллельных потока, чтобы завершить
Выполнение сценария:
Поисковый запрос -->
Проверьте, существуют ли данные в кэше для этого запроса -->
если существуют в кэше , получить его из кэша в противном случае получить его из БД и помещает данные в кэш
отлично Эта работа для следующего сценария
Вот сценарий, если запросы получены последовательно
Первый запрос Запрос кэша -->
проверка (оленья кожа существовать как это первый запрос) -> получить из БД и поместить в кэш
Второй запрос Запрос -->
check cache (данные существуют, поскольку предыдущий запрос уже сделал данные доступны в кеше)
Третий запрос Запрос -->
проверки кэша (данные по-прежнему существует)
Четвертый запрос Запрос -->
проверки кэша (данные по-прежнему существует)
однако не в состоянии, если несколько потоков просить это данных одновременно.
Вот сценарий, если запрос поступает параллельно (одновременно)
Первый запрос Запрос -->
кэша проверки (оленья кожа существовать как это первый запрос) -> получить от DB и поместить в кэш
Второй запрос запрос -->
кэш проверки (оленья кожа существовать как это первый запрос) -> получить из БД и положить I п кэш
Третий запрос Запрос кэша -->
проверка (оленья кожа существовать как это первый запрос) -> получить из БД и поместить в кэш
Четвертый запрос Запрос -->
проверки кэша (оленья кожа существуют как это первый запрос) -> получить из БД и поместить в кэш
Вы заметили проблему? каждый поток попадает в базу данных.
Я не использую какой-либо синхронизированный блок, так как это сделает его последовательным выполнением, правильно?
Как я могу избежать этой проблемы, так что только один поток попадает в базу данных, а другой выбирает данные из кеша (специально в случае параллельного выполнения)? их ли какая-либо модель уже существует для решения таких проблем?
Я знаю, что я смешал темы с запросами, но они по сути то же самое.
И не стесняйтесь изменять название этого вопроса, если оно выглядит плохо.
'synchronized' это ключевое слово, чтобы отметить определенный блок кода только годной к употреблению одним потоком одновременно - идея не сделать все' synchronized', но важнейшие части. – Smutje
Вы сказали _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ –