点燃缓存线程安全吗?

Posted

技术标签:

【中文标题】点燃缓存线程安全吗?【英文标题】:Is ignite cache thread safe? 【发布时间】:2017-10-15 17:04:12 【问题描述】:

我计划从多个线程同时加载缓存。最简单的形式是:

IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache("ints");
ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for (int i = 0; i < 20000000; i++) 
    int t = i;
    es.submit(() -> 
         cache.put(t, t);
    );

这样做安全吗?我阅读了该方法的文档:

将指定的值与缓存中的指定键相关联。如果 缓存以前包含键的映射,旧值是 替换为指定的值。 (据说缓存 c 包含一个 当且仅当 c.containsKey(k) 将返回时,映射键 k 真的。)

没有任何关于线程安全的说法。那么同时输入IgniteCache是否安全?

【问题讨论】:

【参考方案1】:

答案是肯定的,所有 Ignite API 都是线程安全的,可以从多个线程并发使用。

但是,执行单独的 put 并不是进行数据加载的有效方法,对此有更好的技术。详情请参考本页:https://apacheignite.readme.io/docs/data-loading

【讨论】:

【参考方案2】:

是的,所有 IgniteCache 方法都是线程安全的,大多数其他 API 也是如此。

【讨论】:

以上是关于点燃缓存线程安全吗?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的Buffer Pool线程安全吗?

MaxMind 的 GeoIP2 java API 线程安全吗?

C++ 线程安全对象缓存的设计选项

如何实现线程安全的 LRU 缓存驱逐?

实现搜索结果的线程安全缓存

c++ string线程安全吗