Java infinispan hibernate缓存逐出

Java infinispan hibernate缓存逐出,java,hibernate,caching,infinispan,Java,Hibernate,Caching,Infinispan,我正在使用Infinispan 6.0.0和Hibernate 4.3.6 我的配置是: <!-- Default configuration is appropriate for entity/collection caching. --> <namedCache name="entity"> <clustering mode="invalidation"> <stateTransfer fetchInMem

我正在使用Infinispan 6.0.0和Hibernate 4.3.6

我的配置是:

    <!-- Default configuration is appropriate for entity/collection caching. -->
   <namedCache name="entity">
      <clustering mode="invalidation">
         <stateTransfer fetchInMemoryState="false" timeout="20000"/>
         <sync replTimeout="20000"/>
      </clustering>
      <locking isolationLevel="READ_COMMITTED" concurrencyLevel="1000"
               lockAcquisitionTimeout="15000" useLockStriping="false"/>
      <!-- Eviction configuration.  WakeupInterval defines how often the eviction thread runs, in milliseconds.  
           0 means the eviction thread will never run.  A separate executor is used for eviction in each cache. -->
      <eviction maxEntries="${infinispan.maxEntries:10000}" strategy="LRU"/>
      <expiration maxIdle="${infinispan.maxIdle:-1}" wakeUpInterval="5000"/>
      <!-- <transaction transactionMode="TRANSACTIONAL" autoCommit="false"
                   lockingMode="OPTIMISTIC"/> -->
   </namedCache>

未设置系统属性,因此将应用默认值(10.000,-1)

据我所知,当未达到maxEntries时,不应该发生逐出

对于我的一些实体,缓存条目在添加到缓存后很快被删除。add只是一个查询,它返回了很多这样的对象(<1000)。这些对象不会更改(因此不会发生无效)

那么是什么导致infinispan从缓存中删除对象呢

谢谢

好的;明白了

在Hibernate查询中,executeUpdate()清除关联的实体缓存

其他ORM也这样做?

好;明白了

在Hibernate查询中,executeUpdate()清除关联的实体缓存

其他ORM也这样做?

好;明白了

在Hibernate查询中,executeUpdate()清除关联的实体缓存

其他ORM也这样做?

好;明白了

在Hibernate查询中,executeUpdate()清除关联的实体缓存


其他ORM也会这样做?

是的,除非您更改,否则Hibernate不知道本机查询中更新了什么,因此它会清除整个二级缓存以防止保留过时数据

要告诉Hibernate本机查询不会影响二级缓存中的任何数据,请执行以下操作:

SQLQuery sqlQuery = session.createSQLQuery(" ... ");
sqlQuery.addSynchronizedQuerySpace("");  
sqlQuery.executeUpdate();

是的,Hibernate不知道在本机查询中更新了什么,除非您这样做,所以它会清除整个二级缓存以防止保留过时的数据

要告诉Hibernate本机查询不会影响二级缓存中的任何数据,请执行以下操作:

SQLQuery sqlQuery = session.createSQLQuery(" ... ");
sqlQuery.addSynchronizedQuerySpace("");  
sqlQuery.executeUpdate();

是的,Hibernate不知道在本机查询中更新了什么,除非您这样做,所以它会清除整个二级缓存以防止保留过时的数据

要告诉Hibernate本机查询不会影响二级缓存中的任何数据,请执行以下操作:

SQLQuery sqlQuery = session.createSQLQuery(" ... ");
sqlQuery.addSynchronizedQuerySpace("");  
sqlQuery.executeUpdate();

是的,Hibernate不知道在本机查询中更新了什么,除非您这样做,所以它会清除整个二级缓存以防止保留过时的数据

要告诉Hibernate本机查询不会影响二级缓存中的任何数据,请执行以下操作:

SQLQuery sqlQuery = session.createSQLQuery(" ... ");
sqlQuery.addSynchronizedQuerySpace("");  
sqlQuery.executeUpdate();

我怀疑您遇到的问题是,在Infinispan 7.2.x之前,逐出操作是在段级别进行的,因此如果段大小达到其限制(这是maxEntries的一小部分),那么逐出操作将停止。如前所述,该问题已在Infinispan 7.2.x中解决。您应该尝试使用Infinispan 7.2.x,它应该与Hibernate 4.3配合使用。

我怀疑您遇到的问题是,在Infinispan 7.2.x之前,逐出操作是在段级别进行的,因此如果段大小达到其限制(这是maxEntries的一小部分),则会触发逐出操作。如前所述,该问题已在Infinispan 7.2.x中解决。您应该尝试使用Infinispan 7.2.x,它应该与Hibernate 4.3配合使用。

我怀疑您遇到的问题是,在Infinispan 7.2.x之前,逐出操作是在段级别进行的,因此如果段大小达到其限制(这是maxEntries的一小部分),则会触发逐出操作。如前所述,该问题已在Infinispan 7.2.x中解决。您应该尝试使用Infinispan 7.2.x,它应该与Hibernate 4.3配合使用。

我怀疑您遇到的问题是,在Infinispan 7.2.x之前,逐出操作是在段级别进行的,因此如果段大小达到其限制(这是maxEntries的一小部分),则会触发逐出操作。如前所述,该问题已在Infinispan 7.2.x中解决。您应该尝试使用Infinispan 7.2.x,它应该与Hibernate 4.3配合使用