

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 結果キャッシュを使用する Gremlin クエリヒント
<a name="gremlin-query-hints-results-cache"></a>

次のクエリヒントは、[クエリ結果のキャッシュ](gremlin-results-cache.md)が有効である場合に使用できます。

## Gremlin `enableResultCache`クエリヒント
<a name="gremlin-query-hints-results-cache-enableResultCache"></a>

`enableResultCache` の値を持つ `true` クエリヒントは、クエリ結果が既にキャッシュされている場合、キャッシュから返されます。そうでない場合は、新しい結果を返し、キャッシュからクリアされるまでキャッシュします。例えば、次のようになります。

```
g.with('Neptune#enableResultCache', true)
 .V().has('genre','drama').in('likes')
```

後で、まったく同じクエリを再度発行することで、キャッシュされた結果にアクセスできます。

このクエリヒントの値が `false` または、存在しない場合、クエリ結果はキャッシュされません。ただし、それを`false` に設定すると、既存のキャッシュされた結果をクリアしません。キャッシュされた結果をクリアするには、`invalidateResultCache`または`invalidateResultCachekey`ヒントを使用します。

## Gremlin `enableResultCacheWithTTL`クエリヒント
<a name="gremlin-query-hints-results-cache-enableResultCacheWithTTL"></a>

`enableResultCacheWithTTL`クエリヒントは、キャッシュされた結果がある場合、キャッシュ内に既にある結果の TTL に影響を与えずに、キャッシュされた結果を返します。キャッシュされた結果が現在存在しない場合、クエリは`enableResultCacheWithTTL`クエリヒントにより指定される有効期限(TTL) に対して新しい結果を返し、それをキャッシュします。その有効期限は秒単位で指定します。たとえば、次のクエリでは 60 秒の有効期限を指定します。

```
g.with('Neptune#enableResultCacheWithTTL', 60)
 .V().has('genre','drama').in('likes')
```

60 秒の有効期限が終了する前に、キャッシュされた結果にアクセスするための`enableResultCache`または`enableResultCacheWithTTL`クエリヒントのいずれかで同じクエリを使用できます (ここでは、`g.V().has('genre','drama').in('likes')`) 。

**注記**  
指定される有効期限`enableResultCacheWithTTL`は、既にキャッシュされている結果には影響しません。  
結果が `enableResultCache` を使って以前にキャッシュされていた場合、`enableResultCacheWithTTL` 新しい結果を生成し、指定した TTL 用にキャッシュする前に、まずキャッシュを明示的にクリアする必要があります。
結果が `enableResultCachewithTTL` を使って以前にキャッシュされていた場合、`enableResultCacheWithTTL` が新しい結果を生成し、指定した TTL 用にキャッシュする前に、まず前の TTL を期限切れとする必要があります。

有効期限が過ぎると、クエリのキャッシュされた結果がクリアされ、同じクエリの後続のインスタンスが新しい結果を返します。後続のクエリに `enableResultCacheWithTTL` がアタッチされている場合、新しい結果は指定された TTL でキャッシュされます。

## Gremlin `invalidateResultCacheKey`クエリヒント
<a name="gremlin-query-hints-results-cache-invalidateResultCacheKey"></a>

`invalidateResultCacheKey` クエリヒントは、`true` または `false` 値を取ることができます。ある`true` 値を指定すると、`invalidateResultCacheKey` がアタッチされてクリアされるクエリに対してキャッシュされた結果が発生します。たとえば、次の例では、クエリキー `g.V().has('genre','drama').in('likes')` のキャッシュされた結果がクリアされます。

```
g.with('Neptune#invalidateResultCacheKey', true)
 .V().has('genre','drama').in('likes')
```

上記のクエリ例では、新しい結果がキャッシュされることはありません。既存のキャッシュされた結果をクリアした後に新しい結果をキャッシュする場合は、同じクエリで、`enableResultCache` (または`enableResultCacheWithTTL`) を含めることができます。

```
g.with('Neptune#enableResultCache', true)
 .with('Neptune#invalidateResultCacheKey', true)
 .V().has('genre','drama').in('likes')
```

## Gremlin `invalidateResultCache`クエリヒント
<a name="gremlin-query-hints-results-cache-invalidateResultCache"></a>

`invalidateResultCache` クエリヒントは、`true` または `false` 値を取ることができます。ある `true` 値を指定すると、結果キャッシュ内のすべての結果がクリアされます。例えば、次のようになります。

```
g.with('Neptune#invalidateResultCache', true)
 .V().has('genre','drama').in('likes')
```

上記のクエリ例では、結果がキャッシュされることはありません。既存のキャッシュを完全にクリアした後に新しい結果をキャッシュする場合は、同じクエリで、`enableResultCache` (または`enableResultCacheWithTTL`) を含めることができます。

```
g.with('Neptune#enableResultCache', true)
 .with('Neptune#invalidateResultCache', true)
 .V().has('genre','drama').in('likes')
```

## Gremlin `numResultsCached`クエリヒント
<a name="gremlin-query-hints-results-cache-numResultsCached"></a>

`numResultsCached` クエリヒントは、`iterate()` を含むクエリでのみ使用でき、アタッチ先のクエリに対してキャッシュする結果の最大数を指定します。`numResultsCached` が存在する場合にキャッシュされる結果は返されず、キャッシュされるだけであることに注意してください。

たとえば、次のクエリでは、結果のうち最大 100 個をキャッシュするよう指定していますが、キャッシュされた結果は返されません。

```
g.with('Neptune#enableResultCache', true)
 .with('Neptune#numResultsCached', 100)
 .V().has('genre','drama').in('likes').iterate()
```

次のようなクエリを使用して、キャッシュされた結果の範囲 (ここでは最初の 10 件) を取得できます。

```
g.with('Neptune#enableResultCache', true)
 .with('Neptune#numResultsCached', 100)
 .V().has('genre','drama').in('likes').range(0, 10)
```

## Gremlin `noCacheExceptions`クエリヒント
<a name="gremlin-query-hints-results-cache-noCacheExceptions"></a>

`noCacheExceptions` クエリヒントは、`true` または `false` 値を取ることができます。ある `true` 値を指定すると、結果キャッシュに関連するすべての例外が抑制されます。例えば、次のようになります。

```
g.with('Neptune#enableResultCache', true)
 .with('Neptune#noCacheExceptions', true)
 .V().has('genre','drama').in('likes')
```

特に、これは `QueryLimitExceededException` を抑制し、これはクエリの結果が大きすぎて結果キャッシュに収まらない場合に発生します。