5.4. ライフスパンと最大アイドル期間の有効期限
有効期限は、以下の時間制限のいずれかに到達すると、キャッシュからエントリーを削除するように Data Grid を設定します。
- 有効期間
- エントリーが存在することができる最大時間を設定します。
- 最大アイドル
- エントリーがアイドル状態のままになる期間を指定します。エントリーに対して操作が行われない場合は、アイドル状態になります。
現在、アイドルの最大有効期限は永続ストレージのキャッシュをサポートしていません。
EXCEPTION
エビクションストラテジーで expiration および eviction を使用する場合に、有効期限が切れているが、キャッシュから削除されないエントリーは、データコンテナーのサイズに対してカウントされます。
5.4.1. 有効期限の仕組み
有効期限を設定する場合、Data Grid はエントリーが期限切れになるタイミングを決定するメタデータを持つキーを保存します。
-
有効期限は、
creation
タイムスタンプとlifespan
設定プロパティーの値を使用します。 -
最大アイドルは、
last used
タイムスタンプとmax-idle
設定プロパティーの値を使用します。
Data Grid は、有効期限または最大アイドルメタデータが設定されているかどうかを確認し、値と現在の時間を比較します。
(creation + lifespan < currentTime)
または (lastUsed + maxIdle < currentTime)
の場合、Data Grid はエントリーが期限切れであると検出します。
有効期限は、有効期限リーパーによってエントリーがアクセスまたは検出されるたびに発生します。
たとえば、k1
は最大アイドル時間に到達し、クライアントは Cache.get(k1)
要求を作成します。この場合、Data Grid はエントリーが期限切れであることを検出し、データコンテナーから削除します。Cache.get(k1)
リクエストは null
を返します。
Data Grid はキャッシュストアのエントリーも期限切れになりますが、ライフサイクルの有効期限のみになります。最大アイドル有効期限はキャッシュストアでは機能しません。キャッシュローダーの場合、ローダーは外部ストレージからしか読み取ることができないため、Data Grid はエントリーを期限切れにすることはできません。
Data Grid は、期限切れのメタデータを、long
プリミティブデータタイプとしてキャッシュエントリーに追加します。これにより、32 バイトだけにキーのサイズが増える可能性があります。
5.4.2. 有効期限のリーパー
Data Grid は、定期的に実行されるリーパースレッドを使用して、期限切れのエントリーを検出して削除します。有効期限により、アクセスされなくなった期限切れのエントリーが確実に削除されるようにします。
Data Grid の ExpirationManager
インターフェイスは、有効期限リーパーを処理し、processExpiration()
メソッドを公開します。
場合によっては、processExpiration()
を呼び出すことで、有効期限リーパーを無効にし、エントリーを手動で期限切れにすることができます。たとえば、メンテナンススレッドが定期的に実行するカスタムアプリケーションでローカルキャッシュモードを使用している場合です。
クラスター化されたキャッシュモードを使用する場合は、有効期限リーパーを無効にしないでください。
キャッシュストアを使用する場合は、Data Grid は常に有効期限のリーパーを使用します。この場合、無効にすることはできません。
5.4.3. アイドルおよびクラスター化されたキャッシュの最大数
最大アイドル有効期限はキャッシュエントリーの最後のアクセス時間に依存するため、クラスター化されたキャッシュモードにはいくつかの制限があります。
有効期限が切れると、キャッシュエントリーの作成時間は、クラスター化されたキャッシュ全体で一貫した値を提供します。たとえば、k1
の作成時間は、常にすべてのノードで同じです。
クラスター化されたキャッシュを使用した最大アイドル有効期限のため、エントリーに対する最終アクセス時間は、常にすべてのノードで同じではありません。クラスター全体で相対アクセス時間が同じになるように、Data Grid はキーへのアクセス時に、すべての所有者に touch コマンドを送信します。
Data Grid が送信する touch コマンドには、以下の考慮事項があります。
-
Cache.get()
リクエストは、すべての touch コマンドが完了するまで返されません。この同期動作により、クライアント要求のレイテンシーが長くなります。 - touch コマンドは、すべての所有者のキャッシュエントリーの recently accessed メタデータも更新します。
- scattered キャッシュモードの場合、Data Grid はプライマリーおよびバックアップ所有者のみではなく、touch コマンドをすべてのノードに送信します。
関連情報
- 最大アイドル有効期限はインバリデーションモードでは機能しません。
- クラスター化されたキャッシュでの反復は、最大アイドル時間制限を超過した期限切れのエントリーを返すことができます。この動作は、反復中にリモート呼び出しが実行されないため、パフォーマンスが向上します。また、繰り返しは期限切れのエントリーを更新しないことに注意してください。
5.4.4. キャッシュのライフサイクルと最大アイドル時間の設定
キャッシュ内のすべてのエントリーの有効期間と最大アイドル時間を設定します。
手順
- Data Grid 設定を開いて編集します。
-
lifespan
属性またはlifespan()
メソッドでエントリーがキャッシュ内に留まることができる期間をミリ秒単位で指定します。 -
max-idle
属性またはmaxIdle()
メソッドを使用した最後のアクセス後にエントリーがアイドル状態でいられる期間をミリ秒単位で指定します。 - Data Grid 設定を保存して閉じます。
Data Grid キャッシュの有効期限
以下の例では、Data Grid は、最後のアクセス時間が過ぎてから 5 秒または 1 秒後にすべてのキャッシュエントリーの有効期限が切れるようにします。
XML
<replicated-cache> <expiration lifespan="5000" max-idle="1000" /> </replicated-cache>
JSON
{ "replicated-cache" : { "expiration" : { "lifespan" : "5000", "max-idle" : "1000" } } }
YAML
replicatedCache: expiration: lifespan: "5000" maxIdle: "1000"
ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.expiration().lifespan(5000, TimeUnit.MILLISECONDS) .maxIdle(1000, TimeUnit.MILLISECONDS);
5.4.5. エントリーごとのライフスパンおよび最大アイドル時間の設定
各エントリーの lifespan と maximum idle times を指定します。ライフスパンとアイドル時間をエントリーに追加する場合、これらの値はキャッシュの有効期限の設定よりも優先されます。
キャッシュエントリーの lifespan と最大アイドル時間の値を明示的に定義すると、Data Grid はキャッシュエントリーとともにクラスター全体でこれらの値を複製します。同様に、Data Grid は有効期限の値とエントリーを永続ストレージに書き込みます。
手順
リモートキャッシュでは、Data Grid コンソールを使用して、有効期限とアイドル時間を対話的にエントリーに追加できます。
Data Grid コマンドラインインターフェイス (CLI) で、
put
コマンドで--max-idle=
および--ttl=
引数を使用します。リモートキャッシュと組み込みキャッシュの両方に対して、
cache.put()
呼び出しでライフスパンと最大アイドル時間を追加できます。//Lifespan of 5 seconds. //Maximum idle time of 1 second. cache.put("hello", "world", 5, TimeUnit.SECONDS, 1, TimeUnit.SECONDS); //Lifespan is disabled with a value of -1. //Maximum idle time of 1 second. cache.put("hello", "world", -1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS);