我在我的 CacheConfiguration 中使用 LruEvictionPolicyFactory 就像吹
CacheConfiguration<K, V> cacheCfg = new CacheConfiguration<>();
cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cacheCfg.setRebalanceMode(CacheRebalanceMode.ASYNC);
cacheCfg.setPartitionLossPolicy(PartitionLossPolicy.READ_WRITE_SAFE);
cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.PRIMARY_SYNC);
cacheCfg.setEvictionPolicyFactory(new LruEvictionPolicyFactory<>(200000));
我像这样使用 DataRegionConfig
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="initialSize" value="#{512L * 1024 * 1024}"/>
<property name="maxSize" value="#{3 * 1024L * 1024 * 1024}"/>
<property name="pageEvictionMode" value="RANDOM_LRU"/>
<property name="evictionThreshold" value="0.9"/>
<property name="metricsEnabled" value="true"/>
<property name="persistenceEnabled" value="false"/>
</bean>
但是我可以在缓存中看到远远超过2000000条记录,有时,我可以在缓存中看到800000条记录
如何控制缓存中的数据大小以避免一个缓存使用太多内存
根据此文档页面,您的数据区域配置似乎或多或少是正确的。我建议使用
RANDOM_2_LRU
并配置数据区域名称以将其用作参考。
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="initialSize" value="#{512L * 1024 * 1024}"/>
<property name="name" value="region_name"/>
<property name="maxSize" value="#{3 * 1024L * 1024 * 1024}"/>
<property name="pageEvictionMode" value="RANDOM_LRU"/>
<property name="evictionThreshold" value="0.9"/>
<property name="metricsEnabled" value="true"/>
<property name="persistenceEnabled" value="false"/>
</bean>
反过来,您的
CacheConfiguration
不包含 dataRegionName 参数。例如:
CacheConfiguration<K, V> cacheCfg = new CacheConfiguration<>();
cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cacheCfg.setRebalanceMode(CacheRebalanceMode.ASYNC);
cacheCfg.setPartitionLossPolicy(PartitionLossPolicy.READ_WRITE_SAFE);
cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.PRIMARY_SYNC);
cacheCfg.setDataRegionName("region_name");