繁体   English   中英

如何更换点火缓存?

[英]How to replace an ignite cache?

我使用的是ignite版本2.2.0并且我具有以下缓存配置:

private CacheConfiguration<String, Product> getProductCacheConfiguration() {
    final CacheConfiguration<String, Product> cacheConfiguration = new CacheConfiguration<>(Identifiers.PRODUCT_IGNITE_CACHE);

    cacheConfiguration.setName(Identifiers.PRODUCT_IGNITE_CACHE);
    cacheConfiguration.setIndexedTypes(String.class, Product.class);
    cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
    cacheConfiguration.setCacheStoreFactory(new FactoryBuilder.SingletonFactory<>(new ProductCacheStoreAdapter(this.databaseConfiguration)));
    cacheConfiguration.setReadThrough(true);
    cacheConfiguration.setWriteThrough(true);
    cacheConfiguration.setCopyOnRead(false);
    cacheConfiguration.setCacheMode(CacheMode.PARTITIONED);
    cacheConfiguration.setOnheapCacheEnabled(true);

    return cacheConfiguration;
}

最初,当应用程序(春季应用程序)启动时,我将数据库中的所有数据加载到我的ignite缓存中。 之后,我开始执行spring调度程序任务,该任务负责加载新数据并替换旧数据。 通过替换,我并不意味着替换当前缓存中存在的单个项目-我的意思是替换整个缓存-删除所有当前条目并添加所有新条目。

我这里的问题是,在此替换期间,该应用程序将无法使用,因为我首先必须删除所有数据,然后再添加新数据。 因此,当没有可用数据时,会有一个很小的时间范围。 我不要那个。

有没有时间框架没有数据的替换缓存的方法吗?

考虑在Ignite中具有两个缓存并在它们之间进行切换。

触发计划任务后,您可以创建一个新的缓存并开始将数据加载到其中。 读取过程仍然可以使用旧的缓存。 加载完成后,您可以使读取过程切换到新的缓存,然后–清理或销毁旧的缓存。

不过,您将不得不自己实施切换。 例如,您可以使用复制的缓存来存储缓存的名称,该名称当前被认为是活动的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM