terracotta bigmemory はデータの一貫性の問題を簡単に解決できると思っていましたが、ドキュメントを読んで、ehcache.xml とソース コードの両方でいくつかのパラメーター/プロパティが必要です。
私のehcache.xmlは次のとおりです。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
name="config">
<cache name="bigMemory"
maxBytesLocalHeap="128M"
copyOnRead="true"
copyOnWrite="true"
eternal="true">
<terracotta consistency="strong" />
</cache>
<terracottaConfig url="localhost:9510" rejoin="false"/>
</ehcache>
共有データの既存の値を読み取ってインクリメントするコード スニペットは次のとおりです。
for (int i = 0; i < 1000; i++) {
transactionController.begin();
bigMemoryChip.put(new Element(uid, ((Long) bigMemoryChip.get(uid).getObjectValue())+1));
transactionController.commit();
}
私がしたことは、コードを 2 回実行し、一貫性をどのように処理するかを観察することでした。通常、最終値は初期値よりも 2000 大きくなります。
15回ほど試してみましたが、初期値より2000多いのは1回だけで、それ以外はすべて初期値より1500~1700程度多くなりました。