Hibernate 冬眠&;EHCache:maxElementsInMemory是如何工作的?

Hibernate 冬眠&;EHCache:maxElementsInMemory是如何工作的?,hibernate,configuration,ehcache,Hibernate,Configuration,Ehcache,我已经使用defaultCache(用于元素)、StandardQueryCache(用于查询)和UpdateTimestampsCache(用于跟踪数据库更新……但我并不真正了解它的功能) 我已经为这些缓存中的每一个设置了maxElementsInMemory,但是我没有得到这个数字对StandardQueryCache和UpdateTimestampsCache控制的内容。我发现可以缓存在默认缓存中的实体数不能超过10000,但查询缓存不缓存元素。它缓存主键(据我所知) 这是否意味着Stan

我已经使用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张桌子,所以你在那里可能很好