Oracle Coherence 3.5 L1/L2 キャッシングを多用するマルチスレッド アプリケーション (1 秒あたり 1,000 リクエスト) があり、パフォーマンスが重要です...
へのアクセスを同期する必要があります
CacheFactory.getCache()
か?NamedCache
後続のリクエストで結果を再利用する必要がありますか?
現在、CacheFactory への呼び出しを最小限に抑え、アクセスを同期するために次のことを行っています...
static ConcurrentHashMap<String, NamedCache> cacheMap = new ConcurrentHashMap<String, NamedCache>();
protected static NamedCache getCache(String cacheName)
{
NamedCache cache = cacheMap.get(cacheName);
if (cache == null)
{
cache = CacheFactory.getCache(cacheName);
cacheMap.put(cacheName, cache);
}
return cache;
}
更新: 少し突っついた後、Coherence API はスレッドセーフであるはずなので、これは不要のようです...これだけに単純化できるようです。正しいですか?
protected static NamedCache getCache(String cacheName)
{
return CacheFactory.getCache(cacheName);
}