以下は、アプリケーションの観点からの私のシナリオです。
2 つのアプリケーション (.war) ファイルがアプリケーション サーバー (主に Tomcat 8) の同じインスタンスで実行されます。本番環境では、App1 を 100 台のサーバーにデプロイし、App2 は 100 台のうち 50 台のサーバーにのみデプロイできます (App2 は必要ありません)。たくさん配布されます)
現在、この 2 つのアプリケーション (.war) は、共通のカスタム jar (いくつかのユーティリティ クラス) に依存しています。
アプリで Jcache API と hazelcast の実装を使用する予定です。pom.xml に次の依存関係を追加しました
<!-- JSR 107 JCache -->
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.0.0</version>
</dependency>
<!-- Hazelcast dependency -->
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>3.4</version>
</dependency>
計画では、App1 と App2 で共有されるこの共通のカスタム jar にユーティリティ CacheManager を記述します。
インメモリ クラスターを使用しているため、 hazelcast サーバー プロバイダーのみを使用する予定です。つまり、キャッシュはアプリケーション メモリ内に配置されます。
以下は私のコードのスニペットです。
public class PPCacheManager {
// Loads the default CacheProvider (HazelCast) from hazelcast.xml which is
// in classpath
private static CachingProvider defaultCachingProvider = Caching.getCachingProvider(); //
// Loads the default CacheManager from hazelcast.xml which is in classpath
private static CacheManager defaultCacheManager = defaultCachingProvider.getCacheManager();
// Some more code goes here...
私のhazelast.xml
<hazelcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.hazelcast.com/schema/config
http://www.hazelcast.com/schema/config/hazelcast-config-3.4.xsd"
xmlns="http://www.hazelcast.com/schema/config">
<cache name="commonClientCache">
<key-type class-name="java.lang.String"></key-type>
<value-type class-name="java.lang.Object"></value-type>
<statistics-enabled>true</statistics-enabled>
<management-enabled>true</management-enabled>
<read-through>true</read-through>
</cache>
</hazelcast>
今、私はこのアプローチについていくつか質問があります。
これはインメモリ キャッシングを実装する良い方法ですか (現在、クラスター キャッシングを探していません)、このコードは共通のカスタム jar または別の場所にある必要がありますか?
ロードする予定の DB からのマスター データがいくつかあるので (両方のアプリケーションでこのデータが必要です)、このデータをメモリにロードする方法と場所がわかりません。注: 遅延読み込みはしたくありません。このマスター データを最初にロードします。
このキャッシュは両方のアプリケーションで共有されるため、メモリ リークの問題を回避するには、キャッシュ シャットダウン コードをどこに追加する必要がありますか。
アップデート
また、このアプローチを実装することで、アプリケーションごとに 2 つのキャッシュのコピーが作成されますか、それとも 1 つのコピーが両方で共有されますか?
私はすでにこのアプローチをアプリケーションに実装しており、Hazelcast 管理コンソールから、キャッシュが 1 つだけ作成されていることがわかりますが、このキャッシュで GET が 2 回実行されていることがわかります。