何时在Ignite缓存中更新了对象并启用了后写?

时间:2018-01-10 22:21:05

标签: java ignite

我有一个像这样的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的删除功能?

谢谢!

1 个答案:

答案 0 :(得分:1)

当使用write behind时,可以在缓冲区已满或基于超时时刷新数据。如果您没有看到更新,则很可能尚未达到任何条件。请阅读此处了解更多详情:https://apacheignite.readme.io/docs/3rd-party-store#write-behind-caching