Ignite异步将数据放入缓存中

时间:2017-05-03 10:45:37

标签: java asynchronous future

我正在处理一个负载很重的应用程序,并且希望能够异步地将数据放入缓存中。我的意思是调用缓存上的操作并接收表示结果的IgniteFuture<V>

我的意思是我需要能够从持久性存储中对数据提取进行并行化,并将它们放入缓存中。如果发生了什么事情,我可以尝试再次提取数据(没有太多的数据,非常精细)。

1 个答案:

答案 0 :(得分:1)

如果你对.d2我认为不应该是)没有任何硬性要求,你想要的是将数据放入缓存并获取它的一些机制异步处理,然后处理该操作返回的结果,然后您可以使用Java's Executor Service

如果您不太了解Java的执行程序服务,那么您可能需要阅读文档或this answer,其中突出显示了快速点,在下面的示例中,我还添加了注释。

以下是关于线程数的其他一些快速点:

  • 此示例使用&#34; span{ color:white; display:block;/*Add this*/ } &#34;创建IgniteFuture实施时,还有其他选项,如&#34; ExecutorService&#34;和&#34; ThreadPoolExecutor&#34;它允许您在JVM中定义所需的线程数。
  • 您也可以选择直接创建Executors.newSingleThreadExecutor()对象,如此Executors.newFixedThreadPool(10),您可以更多地控制线程和队列类型的数量。如果您想自己创建ThreadPoolExecutor对象而不是return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
  • ,则需要详细了解此信息

与您的实施相关的其他几点:

  • 当您处理ThreadPoolExecutor个对象时,它是阻塞进程,因为ExecutorService是一个阻塞调用,因此您的主线程将被阻塞,直到返回并处理所有Future对象。
  • 如果您不想阻止,那么有几个选项,比如您可以创建一个新线程来执行所有这些处理,从而释放您的主线程。另一种选择可能是不处理Future对象,所以一旦你执行Future,你的线程将是空闲的,然后在你的Future.get()对象中你可以将结果推送到队列中(你可以选择)根据您的需要Java's queue implementation然后从其他线程处理该队列。另一种选择可能是专门用另一个线程来处理你的Future对象。

示例代码:

executorService.submit(callableTask1)