当我使用GridCacheStore
-backed 缓存时,第一个get()
可能需要很长时间,因为在内部GridCacheStore
将执行计算/慢速搜索等。
该get()
节点上的第二个将很快,因为结果已被该节点缓存。
但是,get()
在其他节点上仍然很慢,因为结果没有被复制。如何使这个复制?我已经设置了cacheMode=REPLICATED
。
我的配置:
<bean parent="cache-template">
<property name="name" value="yagoEntityByLabel" />
<property name="cacheMode" value="REPLICATED" />
<property name="atomicityMode" value="ATOMIC" />
<property name="distributionMode" value="NEAR_PARTITIONED" />
<property name="backups" value="1" />
<property name="store">
<bean class="id.ac.itb.ee.lskk.lumen.core.yago.YagoEntityByLabelCacheStore" />
</property>
<property name="swapEnabled" value="false" />
<property name="evictionPolicy">
<bean class="org.gridgain.grid.cache.eviction.lru.GridCacheLruEvictionPolicy">
<property name="maxSize" value="10000" />
</bean>
</property>
</bean>
解决方法是不使用GridCacheStore
-backed 而是使用put()
,但是有很多类型并且它不是原子的,因为逻辑将是:
@Nullable value = cache.get(key);
if (value == null) {
value = calculateHeavily(key);
cache.put(key, value);
}