gpt4 book ai didi

hibernate - Hibernate和EHCache:maxElementsInMemory如何工作?

转载 作者:行者123 更新时间:2023-12-03 14:00:42 24 4
gpt4 key购买 nike

我已经为EHCache配置了defaultCache(用于元素),StandardQueryCache(用于查询)和UpdateTimestampsCache(我认为是为了跟踪数据库更新……但我实际上并没有真正地了解它的功能)。

我已经为每个缓存设置了maxElementsInMemory,但是我没有得到的是这个数字控制StandardQueryCache和UpdateTimestampsCache的内容。我知道可以在默认缓存中缓存的实体数不能超过10000,但是查询缓存不缓存元素。它缓存主键(据我了解)。

这是否意味着StandardQueryCache的maxElementsInMemory控制了结果中“行”的数量,还是控制了它可能具有的元素的主键对的数量?

那么UpdateTimestampsCache呢?它是否跟踪实体的上次更新时间,表的上次更新时间……或其他?我应该为maxElementsInMemory使用哪个数字?

谢谢!

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect"     dynamicConfig="true">
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600">
</defaultCache>

<cache
name="org.hibernate.cache.internal.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600">
</cache>

<cache
name="org.hibernate.cache.spi.UpdateTimestampsCache"
maxElementsInMemory="10000"
eternal="true">
</cache>

</ehcache>

最佳答案

对于查询缓存,每个查询结果的结果都是StandardQueryCache区域中的一个条目。因此,您的缓存当前已设置为在默认/未命名区域中缓存10000个不同的查询结果。设置为使用命名区域(Query#setCacheRegion)的查询将写入其他缓存区域。

每当基础数据发生更改时,这些结果都需要“无效”。这就是UpdateTimestampsCache的目的。当Hibernate写入表时,它会在UpdateTimestampsCache中创建条目(仅当启用查询缓存时才启用此过程,因为它明确是使这些缓存的查询结果无效的一部分)。当回读缓存的查询结果时,我们将查询结果所缓存的时间戳与其用于确定结果是否仍然有效的所有表的时间戳进行对照。如果可能的话,最好不要限制该区域。如果需要,最好的数目是基础域模型中的表数。否则,缓存的查询结果可能会在不必要时开始变得无效。很难想象您有10000个表,所以在那里可能还不错。

关于hibernate - Hibernate和EHCache:maxElementsInMemory如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12524601/

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