NCache .NET のインメモリ分散キャッシュです。 しかし、100% ネイティブのクライアントとサードパーティの統合により、Java もサポートしています。 概要を見てみましょう NCache Java クライアントと、Java アプリケーション用の XNUMX つのサードパーティ統合。
Java クライアントでの基本的なキャッシング操作
インストールした後 NCache,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
try { // After having NCache up and running... // Connect to cache String cacheName = "demoCache"; Cache cache = CacheManager.getCache(cacheName); // Cache a product Product product = buildOrRetrieveProductToCache(); String key = "Product:" + product.getProductID(); cache.add(key, product); // Later in another part of our code... // Retrieve cached product Product foundProduct = cache.get(key, Product.class); if (foundProduct != null) { // Do something with the cached product here } else { // No product was found } } catch (OperationFailedException ex) { // Handle NCache-specific exceptions, like connection failures, here } catch (Exception ex) { // Handle generic exceptions, like IllegalArgumentException, here } |
Java クライアントを使用すると、より多くのキャッシュ操作が可能になります。 単一のアイテムの追加と取得とは別に、アイテムを追加、取得、更新、および削除する一括操作があります。 および非同期 API。 より高度なキャッシュ操作の詳細については、次を確認してください。 CRUD操作:概要. そのガイドにもJavaの例があります。
また、Java アプリケーション内では、 SQL クエリ機能とインデックス作成戦略 SQL に似た構文を使用して、キャッシュされたエントリを取得および削除します。
これらのキャッシング操作を使用して、Java アプリケーション内に独自のキャッシング メカニズムを記述します。 しかし、 NCache、既存のサードパーティ統合を利用できます。 それらのうちのXNUMXつを見てみましょう。
NCache Hibernate の二次キャッシュとして
Hibernate は、Java 用のオブジェクト リレーショナル マッピング ツールです。 おそらく、Java の世界では広く普及しているツールなので、あまり紹介する必要はありません。
データベースへの過剰なラウンドトリップを避けるために、Hibernate はさまざまなキャッシング メカニズムを使用します: 第 XNUMX レベルと第 XNUMX レベルのキャッシュです。 また、データベースからオブジェクトを取得するときに、Hibernate がそれらの間でフォールバックします。
第 XNUMX レベルのキャッシュは、セッションごとのキャッシュです。 これは、オブジェクトをロードするときに Hibernate がチェックする最初のキャッシュです。 第 XNUMX レベルのキャッシュとは異なり、第 XNUMX レベルのキャッシュはオプションです。 また、すべてのセッションで利用できます。
Hibernate は、二次キャッシュの実装を提供しません。 代わりに、サードパーティのキャッシング プロバイダーに依存する必要があります。 NCache 二次キャッシュのように機能します。
私たちは作れる NCache 本番コードを変更せずに、構成ファイルを介して Hibernate の第 XNUMX レベルのキャッシュ プロバイダーとして機能します。
XNUMX 次キャッシュはデフォルトで無効になっています。 有効にして使用するには NCache XNUMX 番目のレベルのキャッシュとして、Hibernate 構成ファイルで構成する必要があります。 たとえば、これは hibernate.cfg.xml
ファイル、
1 2 3 4 5 6 7 8 9 10 11 |
<hibernate-configuration> <session-factory> <!-- It enables Hibernate second-level cache --><!-- It enables Hibernate second-level cache --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- It configures NCache as a second-level cache provider, for Hibernate 3.6 and above ---> <property name="hibernate.cache.region.factory_class">JCacheRegionFactory</property> <!-- It's NCache applicaton identifier --> <property name="ncache.application_id">myapp</property><!-- It configures NCache as a second-level cache provider, for Hibernate 3.6 and above ---> JCacheRegionFactory </session-factory> </hibernate-configuration> |
NCache 第 XNUMX レベルのプロバイダーとして
NCacheHibernate.xml
.
Hibernate はリージョンを使用して、オブジェクトを名前でグループ化します。 と NCache、リージョンごとに個別のキャッシュ インスタンスを使用することも、複数のリージョンに対して単一のキャッシュ インスタンスを使用することもできます。 リージョンごとに異なる設定を行うこともできます NCache キャッシング機能。 また、これらすべての構成を内部で指定します NCacheHibernate.xml
1 2 3 4 5 6 7 8 |
<configuration> <application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false"> <cache-regions> <region name="MyCustomRegion" cache-name="myPartitionedcache" priority="default" expiration-type="sliding" expiration-period="8"/> <region name="DefaultRegion" cache-name="demoCache" priority="default" expiration-type="none" expiration-period="0" /> </cache-regions> </application-config> </configuration> |
詳細については NCacheHibernate.xml
ファイル、チェック キャッシュ可能なオブジェクトとリージョンを構成する.
第 XNUMX レベルのキャッシュを有効にしても、Hibernate はデフォルトでオブジェクトをキャッシュしません。 注釈またはマッピング ファイルを使用して、オブジェクトをキャッシュ可能としてマークする必要があります。 たとえば、注釈を付けましょう Product
クラス、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@Entity @Table(name = "Products") @Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Product { @Id @GeneratedValue @Column(name = "ProductID") private int ProductID; @Column(name = "Name") private String Name; public Product() {} public int getProductID() { return ProductID; } public void setProductID(int productID) { this.ProductID = productID; } public String getName() { return Name; } public void setName(String name) { this.Name = name; } } |
それが私たちが使用できる方法です NCache XNUMX 番目のレベルの Hibernate キャッシュとして。 また、使用できます NCache クエリ結果をキャッシュします。 大規模で複雑で頻繁なクエリの結果をキャッシュすることで、アプリケーションの全体的なパフォーマンスを向上させることができます。 使い方を学ぶには NCache Hibernate でのクエリ キャッシングについては、チェックしてください クエリキャッシュを使用する. Hibernate 構成ファイルとキャッシュするクエリを少し変更する必要があります。
NCache 春の統合
NCache Spring フレームワークとも統合されます。 Spring フレームワークは、アプリケーション フレームワークであり、Java プラットフォーム用のコントロール コンテナーの反転です。 接続できます NCache Spring キャッシング モジュールに組み込み、スケーラブルで分散型にします。
私たちが使うとき NCache Spring では、データを提供するためのデータベースへのトリップ数を減らすことでデータベースの負荷を軽減し、パフォーマンスを向上させています。
使用を開始するには NCache Spring では、構成クラスに注釈を付ける必要があります。 このような、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Configuration @EnableCaching public class CachingConfiguration { @Bean public CacheManager cacheManager() { SpringConfigurationManager springConfigurationManager = new SpringConfigurationManager(); URL resource = getClass().getClassLoader().getResource("ncache-spring.xml"); springConfigurationManager.setConfigFile(resource.getPath()); NCacheCacheManager cacheManager = new NCacheCacheManager(); cacheManager.setSpringConfigurationManager(springConfigurationManager); return cacheManager; } } |
注釈を使用する代わりに、XML ファイルを使用することもできます。 ただし、コンパイル時に型エラーを見つけることができるため、注釈を使用した方がよいでしょう。
注釈または XML ファイルを介して Spring 構成を変更した後、実際のキャッシュを構成する必要があります。 内部 ncache-spring.xml
ファイルで、有効期限や削除ポリシーなどのプロパティを使用してキャッシュ インスタンスを定義します。 例えば、
1 2 3 4 5 6 |
<application-config default-cache-name="default"> <caches> <cache name="ProductsCache" ncache-instance="demoCache" priority="normal" expiration-type="absolute" expiration-period="10"/> </caches> </application-config> |
Spring アプリケーションを構成してキャッシュを有効にしたら、次のステップは、キャッシュするメソッドに注釈を付けることです。 たとえば、API コントローラーから呼び出したサービスまたはアプリケーション内の他のサービスをキャッシュするには、次のように記述できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
@Service public class ProductService { @Cacheable("ProductsCache") public String getProductNameByCode(String code) { return retrieveProductNameFromDatastore(code); } private String retrieveProductNameFromDatastore(String code) { // Image a query to retrieve a product name from a database return "Any name"; } } |
これらすべての手順で、使用する準備が整いました NCache 春と一緒に。
構成の詳細については、 NCache スプリング付き、チェック 使用するアプリケーションの構成 NCache Spring キャッシング プロバイダーとして.
まとめ
それが私たちが使用できる方法です NCache 基本的なキャッシング操作をサポートする Java クライアント。 統合できます NCache Hibernate と Spring Framework を使用して、構成とわずかなコーディングの変更のみを行います。
Hibernate と Spring とは別に、 NCache JCache API もサポートしています。 使用できます NCache JCache アプリケーションで使用し、分散ソリューションで同じ JCache API を使用します。 統合方法を学ぶには NCache JCacheを使用して、訪問してください Jキャッシュガイド.
また、Java と .NET のバックエンド サイドを持つハイブリッド アプリケーションの場合、 NCache 移植可能なデータ型をサポートします。 使用できます NCache Java と .NET バックエンド アプリケーション間でデータを共有します。 たとえば、ポータブル データ型を使用すると、 を使用した JSON ストレージ NCache XNUMX つの .NET および Java アプリケーション間でデータを共有します。
Java アプリケーションで分散型のスケーラブルでパフォーマンスの高いキャッシング ソリューションを活用したい場合は、 NCache 試してみます。