Осознает ли @Cacheable проблему "грохочущего стада"?
проблема "грозового стада" возникает в очень параллельной среде (как правило, многие пользователи). Когда многие пользователи делают запрос к одному и тому же фрагменту данных одновременно, и есть пропуски кэша (данные для кэшированного элемента отсутствуют в кэше), возникает проблема громоподобного стада.
Я не смог найти доказательств того, что ehcache-весна-аннотации решает эту проблему.
Мне нужно написать обертку и использовать явный запирающий механизм?
1 ответов
короткий ответ на ваш вопрос будет "нет". Аннотации кэша предназначены для несколько общего назначения, в то время как решения таких проблем, как "грозовое стадо", специфичны для реализации.
по вашему последующему комментарию я собираюсь предположить, что вы используете Ehcache в качестве реализации. Страница, на которую вы ссылаетесь, описывает проблему, предлагает несколько решений, таких как использование BlockingCache в качестве декоратора для базового кэша. (Тот факт, что они документируют такие решения подразумевает, что Ehcache по умолчанию не обрабатывает проблему "грозового стада".)
BlockingCache кажется самым прямым решением, поэтому я бы начал с этого. Использование BlockingCache программно достаточно просто, но использование его по конфигурации требует немного больше работы с вашей стороны. Вам нужно будет написать свой собственный BlockingCacheDecoratorFactory, расширив CacheDecoratorFactory Ehcache. Как только вы это сделаете, вы можете настроить его в ehcache.xml для любого кэша, который нуждается в нем. Но сделайте так с осторожностью; превращение кэша в BlockingCache без необходимости может негативно повлиять на производительность.
скажем, вы написали свой собственный декоратор factory org.штабелер.кэш.BlockingCacheDecoratorFactory, и у вас есть кэш с именем "adImages", который вы хотите защитить от проблемы "грозового стада". Ваш новый ehcache.запись xml может выглядеть так:
<cache name="adImages"
maxElementsInMemory="5000"
eternal="false"
timeToIdleSeconds="1800"
timeToLiveSeconds="3600"
overflowToDisk="false">
<cacheDecoratorFactory class="org.stacker.cache.BlockingCacheDecoratorFactory" />
</cache>
проверьте руководство пользователя вhttp://ehcache.org/documentation/user-guide/cache-decorators читать о декораторы кэша в Ehcache. Надеюсь, это поможет.