お気に入り | 日本語 | ログイン

Memcache Java API 概要

高パフォーマンスでスケーラブルな Web アプリケーションでは通常、一部のタスクの処理を処理するに当たって強力な永続性ストレージに優先して(あるいはその代わりに)分散型インメモリ データ キャッシュを使用します。 App Engine にメモリ キャッシュ サービスが含まれているのはそのためです。

JCache を使用したデータ キャッシュ

Memcache Java API は、JSR 107 に記述されたドラフト標準である JCache インターフェース(javax.cache)を実装しています。JCache はキャッシュされたデータへのマップのようなインターフェースを提供します。キーを使用し、キャッシュへの値の保存およびキャッシュからの値の取得を行います。キーと値は、任意の直列化可能な型またはクラスを指定します。

import java.util.Collections;
import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;

// ...
        Cache cache;

        try {
            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
        } catch (CacheException e) {
            // ...
        }

        String key;      // ...
        byte[] value;    // ...

        // Put the value into the cache.
        cache.put(key, value);

        // Get the value from the cache.
        value = (byte[]) cache.get(key);

メモリ キャッシュを使用する場合

メモリ キャッシュを使用する理由の 1 つは、一般的なデータストア クエリを高速化するためです。多くのリクエストが同じパラメータを持つ同じクエリを実行し、変更された結果がウェブサイトに直ちに反映されるのではない場合、アプリケーションは結果を memcache にキャッシュします。後からのリクエストは memcache を確認し、結果がない場合または期限が切れている場合のみデータストアへのクエリを実行します。セッション データ、ユーザー設定およびサイトのほとんどのページに対して実行されるその他のクエリは、キャッシュに適した処理です。

memcache はその他の一時的な値でも便利に使用できます。しかし、値を memcache のみに保存し、永続的なストレージには保存しない場合は、値に突然アクセスできなくなった場合もアプリケーションが適切に動作するよう設定する必要があります。値が memcache で期限切れになってしまう可能性はいつでもあります。また、値に設定された期限より前に期限切れとなってしまうことがあります。たとえば、ユーザーのセッション データが突然なくなると、セッションがうまく動作しなくなることがあります。そのデータは memcache だけでなくデータストアにも保存される必要があります。

キャッシュされたデータの期限切れ

デフォルトでは、memcache に保存された値はできるだけ長く保持されます。キャッシュの残りのメモリ量が少ない状態において新しいデータがキャッシュに追加されると、値がキャッシュから削除される場合があります。メモリ残量の低下が原因で値が削除される場合は、最後の使用から最も時間が経過した値から削除されます。

アプリケーションは、値を保存する際に有効期限を設定できます。期限は、値を追加した時間からの経過秒数、または将来の絶対 Unix エポック タイム(1970 年 1 月 1 日 0 時からの経過秒数)で指定します。値は指定された有効期限を過ぎると削除されますが、他の理由で削除されることもあります。

メモリの残量低下以外の理由でも、まれに有効期限前に値がキャッシュから削除されることがあります。memcache はサーバー障害から回復することができますが、memcache の値はディスクに保存されていないため、サービスに障害が発生すると値が利用できなくなる可能性があります。

一般的に、アプリケーション側ではキャッシュの値が常に利用可能だと仮定すべきではありません。

割り当てと制限

各 Memcache コールは Memcache API コールの割り当てに数えられます。

アプリケーションから memcache に送信されたデータは (Memcache) API に送信されたデータ の割り当てに数えられます。画像サービスから受け取るデータは、(Memcache) API から受信したデータ の割り当てとして数えられます。

割り当ての詳細については、割り当て、および管理コンソールの「割り当て詳細」セクションをご覧ください。

割り当てに加え、メール サービスの使用には次の制限があります。

制限 制限値
キャッシュされた値の最大サイズ 1 MB