gpt4 book ai didi

java - @Cacheable 是否知道 'Thundering Herd' 问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:01 27 4
gpt4 key购买 nike

“雷霆万钧”问题发生在高度并发的环境中(通常是很多用户)。当多个用户同时请求同一条数据,出现缓存未命中(缓存元素的数据不在缓存中)时,就会触发雷群问题。

我找不到 ehcache-spring-annotations 的证据正在解决这个问题。

我是否必须编写包装器并使用显式锁定机制?

最佳答案

对您的问题的简短回答是“否”。缓存注解旨在具有一定的通用性,而解决诸如“雷霆万钧”之类的问题是特定于实现的。

根据您的后续评论,我假设您正在使用 Ehcache 作为实现。您引用的描述问题的页面提供了几个解决方案,例如使用 BlockingCache 作为底层缓存的装饰器。 (他们记录此类解决方案的事实意味着 Ehcache 默认不处理“惊群”问题。)

BlockingCache 似乎是最直接的解决方案,所以我将从它开始。以编程方式使用 BlockingCache 非常简单,但通过配置使用它需要您做更多的工作。您需要通过扩展 Ehcache 的 CacheDecoratorFactory 来编写自己的 BlockingCacheDecoratorFactory。完成后,您可以在 ehcache.xml 中为任何需要它的缓存配置它。但要小心;将缓存不必要地变成 BlockingCache 会对性能产生不利影响。

假设您编写了自己的装饰器工厂 org.stacker.cache.BlockingCacheDecoratorFactory 并且您有一个名为“adImages”的缓存,您希望保护它免受“thundering herd”问题。您的新 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 中的缓存装饰器。我希望这会有所帮助。

关于java - @Cacheable 是否知道 'Thundering Herd' 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272487/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com