我有一个像这样的Ignite Cache: IgniteCache缓存;
缓存配置为:
<property name="readThrough" value="true" />
<property name="writeThrough" value="true" />
<property name="writeBehindEnabled" value="true" />
用于MariaDB第三方持久性的CacheStore。
<property name="cacheStoreFactory">
<bean class="javax.cache.configuration.FactoryBuilder"
factory-method="factoryOf">
<constructor-arg>
<bean class="my_backend_bean">
<constructor-arg value="jdbc:mariadb://xxxxx" />
<constructor-arg value="user" />
<constructor-arg value="password" />
</bean>
</constructor-arg>
</bean>
</property>
这似乎总体上运作良好。我看到存储对象的cache.put(key,object)快速返回,而MariaDB是异步更新的。
但是,我遇到了一些问题,其中MariaDB并不总是使用对象的最新值进行更新。我试图找到原因。
所以这是我的问题: - 如果我执行cache.put(“1”,object)一次,然后更改对象中的属性,然后再次执行cache.put(“1”,object),将Ignite调用缓存存储后端bean的write方法再次更新MariaDB?我看到这在我的测试中发生,但是想知道Ignite什么时候不能更新缓存存储?什么显示Ignite对象被修改为同一个键?是否存在Ignite尚未将第一个对象写入存储并且第二个cache.put被调用的情况,是否会导致问题不更新缓存存储? - 我应该更好地检查cache.containsKey然后调用cache.replace而不是cache.put吗?或者将替换实际调用我的缓存存储后端bean的删除功能?
谢谢!
答案 0 :(得分:1)
当使用write behind时,可以在缓冲区已满或基于超时时刷新数据。如果您没有看到更新,则很可能尚未达到任何条件。请阅读此处了解更多详情:https://apacheignite.readme.io/docs/3rd-party-store#write-behind-caching