java - 如何确保我的 apache Ignite 2.x 分布式缓存放置是异步的
问题描述
下面我有一个使用 apache ignite 的分布式缓存示例。
我想在执行缓存放置操作时做到这一点:cache.put(i, new X12File("x12file" + i, LocalDateTime.now().toString()));
它是完全异步的。这意味着我的 put 操作应该非常快,并且推送到集群的其余部分应该在后台进行,而不会给用户带来不便。我需要“一劳永逸”的功能。
我正在努力在文档中找到异步选项。有人可以帮助我了解如何更改此代码以使我的放置尽可能“一劳永逸”吗?谢谢!
private static final String ORG_CACHE = IgniteCache.class.getSimpleName() + "Organizations";
public static void main(String[] args) throws Exception {
DataRegionConfiguration dfltDataRegConf = new DataRegionConfiguration();
dfltDataRegConf.setPersistenceEnabled(true);
DataStorageConfiguration dsCfg = new DataStorageConfiguration();
dsCfg.setDefaultDataRegionConfiguration(dfltDataRegConf);
dsCfg.setStoragePath("/home/kazakov/tmp");
IgniteConfiguration igniteConfiguration = new IgniteConfiguration();
igniteConfiguration.setDataStorageConfiguration(dsCfg);
TcpDiscoverySpi tcpDiscoverySpi = new TcpDiscoverySpi();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
tcpDiscoverySpi.setIpFinder(ipFinder);
igniteConfiguration.setDiscoverySpi(tcpDiscoverySpi);
try(Ignite ignite = Ignition.start(igniteConfiguration)) {
ignite.active(true);
CacheConfiguration<Long, X12File> cacheCfg = new CacheConfiguration<>(ORG_CACHE);
cacheCfg.setCacheMode(CacheMode.REPLICATED);
cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cacheCfg.setBackups(1);
cacheCfg.setOnheapCacheEnabled(true);
IgniteCache<Long, X12File> cache = ignite.getOrCreateCache(cacheCfg).withExpiryPolicy(new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 1)));
for (long i = 0; i < 4_000_000; i++) {
if (i > 0 && i % 10_000 == 0)
System.out.println("Done: " + i);
cache.put(i, new X12File("x12file" + i, LocalDateTime.now().toString()));
}
Thread.sleep(5000);
int matches = 0;
for (long i = 0; i < 4_000_000; i++) {
if (cache.get(i) != null)
++matches;
}
System.out.println("Matches: " + matches);
}
}
解决方案
查看 IgniteCache#putAsync(..)
见:https ://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCache.html#putAsync-KV-
推荐阅读
- java - OO 设计 - 将结果的责任委托给不同的类
- google-chrome - 我的 chrome 扩展想法是内容脚本还是后台脚本?
- laravel - 在 laravel 中使用受保护的日期时,找不到四位数的年份数据丢失
- amazon-web-services - Firehose、管道、数据流的 Kinesis 服务有什么区别/用例
- javascript - 如何通过单击链接在Javascript中使用DOM动态生成带有关闭按钮的文本框?
- php - 备份系统上的 PHP FPM 下载速度
- uml - 如何改进有关自行车组件的类图
- reactjs - REACT.JS + FORMIK 输入字段问题,
- c# - 如何在 C# 中测量并行任务或多线程程序的总执行时间?
- laravel - Laravel 控制器方法和路由的最佳命名约定