キャッシュ テクノロジは日常の開発で広く使用されており、Java にはさまざまなキャッシュ実装があります。中でもキャッシュリーダライタは重要なキャッシュ技術であり、本記事ではJavaのキャッシュリーダライタについて詳しく紹介します。
1. キャッシュ リーダーおよびライターとは何ですか
キャッシュ リーダーおよびライターは、オブジェクトをキャッシュに保存する際の特定のキャッシュ動作をサポートするために提供されるインターフェイスです。キャッシュ リーダーとキャッシュ ライターは、キャッシュからデータを読み取るメソッドと、キャッシュにデータを書き込むメソッドを提供します。キャッシュ リーダーとキャッシュ ライターは、キャッシュの一貫性を確保し、開発者が独自のキャッシュ戦略をカスタマイズできる共通のキャッシュ インターフェイスを提供します。
Java のキャッシュ リーダーおよびキャッシュ ライターは、CacheWriter および CacheLoader と呼ばれるパターンを使用します。 CacheWriter はキャッシュにデータを書き込むメソッドを提供し、CacheLoader はキャッシュからデータを読み取るメソッドを提供します。
2. CacheWriter インターフェイス
CacheWriter インターフェイスは、キャッシュにデータを書き込むために使用されるインターフェイスです。これには、CacheEntry オブジェクトをパラメーターとして受け取る書き込みメソッドが含まれています。 CacheEntry オブジェクトは、キャッシュに書き込まれるデータを表します。以下は、CacheWriter インターフェイスのサンプル コードです。
public interface CacheWriter<K,V> { void write(Cache.Entry<? extends K, ? extends V> entry) throws CacheWriterException; }
CacheWriter には、キャッシュ キーと値の型を表すジェネリック型 K と V が含まれています。 write メソッドは、キャッシュ内のデータが書き込まれることを示す Cache.Entry オブジェクトをパラメータとして受け取ります。 Cache.Entry にはキャッシュ キーとキャッシュ値が含まれており、それらの値を取得および設定するメソッドを提供します。
キャッシュに書き込む場合、CacheWriter インターフェイスは次のメソッドを提供します。
単一のキャッシュ エントリを書き込む: write(Cache.Entry)
複数のエントリを書き込む: writeAll( Collection extends Cache.Entry extends K,? extends V>>)
キャッシュ エントリの削除: delete(Object)
複数のエントリの削除: deleteAll(Collection> ; )
CacheWriter の書き込みメソッドは同期であるため、データの一貫性を確保できることに注意してください。
3. CacheLoader インターフェイス
CacheLoader インターフェイスは、キャッシュからデータを読み取るために使用されるインターフェイスです。これには、キャッシュ キーをパラメータとして受け取り、キャッシュ値を返すロード メソッドが含まれています。以下は、CacheLoader インターフェイスのサンプル コードです。
public interface CacheLoader<K,V> { V load(K key) throws CacheLoaderException; }
CacheLoader には、キャッシュ キーと値の型を表すジェネリック型 K と V が含まれています。 load メソッドは、キャッシュ キーをパラメータとして受け取り、キャッシュ値を返します。キャッシュされた値が見つからない場合、load メソッドは null を返す必要があります。
一般的に、CacheLoader はキャッシュを自動的に埋めるために使用されます。キーに対応する値がキャッシュ内で見つからない場合、キャッシュは CacheLoader の load メソッドを呼び出して、バックグラウンド データ ソース (データベース、ファイル システムなど) からデータを自動的にロードし、そのデータをキャッシュに保存します。
4. CacheWriter と CacheLoader の例
以下は CacheWriter と CacheLoader のサンプル コードです。ここでは、ConcurrentHashMap に基づく単純なキャッシュを使用します。
import java.util.Map; import javax.cache.Cache.Entry; import javax.cache.integration.CacheLoader; import javax.cache.integration.CacheLoaderException; import javax.cache.integration.CacheWriter; import javax.cache.integration.CacheWriterException; public class SimpleCache<K, V> implements CacheWriter<K, V>, CacheLoader<K, V> { private Map<K, V> cache = new ConcurrentHashMap<>(); @Override public void delete(Object o) throws CacheWriterException { cache.remove(o); } @Override public void deleteAll(Collection<?> collection) throws CacheWriterException { for(Object o : collection) { delete(o); } } @Override public void write(Entry<? extends K, ? extends V> entry) throws CacheWriterException { cache.put(entry.getKey(), entry.getValue()); } @Override public void writeAll(Collection<? extends Entry<? extends K, ? extends V>> collection) throws CacheWriterException { for(Entry<? extends K, ? extends V> entry : collection) { write(entry); } } @Override public V load(K k) throws CacheLoaderException { return cache.get(k); } @Override public Map<K, V> loadAll(Iterable<? extends K> iterable) throws CacheLoaderException { throw new UnsupportedOperationException("Not implemented"); } @Override public void loadCache(IgniteBiInClosure<K, V> biInClosure, Object... objects) throws CacheLoaderException { throw new UnsupportedOperationException("Not implemented"); } }
この例では、ConcurrentHashMap を使用してメモリベースのキャッシュを実装します。 CacheWriter インターフェイスと CacheLoader インターフェイスを実装し、対応する書き込みメソッドとロード メソッドを実装しました。キーがキャッシュに存在しない場合、load メソッドは null を返し、キャッシュは CacheLoader のload メソッドを呼び出して、バックグラウンド データ ソースからデータを読み込みます。
5. 概要
キャッシュ リーダーおよびライターは、Java キャッシュ テクノロジの重要な部分です。開発者が独自のキャッシュ戦略をカスタマイズできるようにする、カスタマイズ可能なキャッシュ インターフェイスを提供します。 Javaではキャッシュリーダー、キャッシュライターの実装メソッドの一つとしてCacheWriter、CacheLoaderがあり、これらを実装することでアプリケーション上で自動的にキャッシュを埋める機能を実現できます。
以上がJava キャッシュ テクノロジのキャッシュ リーダーおよびキャッシュ ライターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。