メインコンテンツにスキップ

APIリファレンス

Accelerate APIリファレンスドキュメントは、次のスキーマに基づいています。

model User {
id Int @id @default(autoincrement())
name String?
email String @unique
}

すべての例は、Userモデルに基づいています。

cacheStrategy

Prisma ClientのAccelerate拡張機能を使用すると、モデルクエリにcacheStrategyパラメータを使用し、ttlおよびswrパラメータを使用して、Accelerateのキャッシュ戦略を定義できます。Accelerate拡張機能を使用するには、Prisma Clientバージョン4.10.0をインストールする必要があります。

オプション

cacheStrategyパラメータは、次のキーを持つオプションを受け取ります。

オプションタイプ必須説明
swr60Intいいえ秒単位のstale-while-revalidate時間。
ttl60Intいいえ秒単位のtime-to-live時間。
tags["user"]String[]いいえtagは、アプリケーション内の特定のクエリの無効化を制御するための変数として機能します。キャッシュを無効化するためのオプションの文字列配列であり、各タグには英数字とアンダースコアのみを含み、最大長は64文字です。

クエリにキャッシュ戦略を追加し、60秒のstale-while-revalidate(SWR)値、60秒のtime-to-live(TTL)値、および"emails_with_alice"のキャッシュタグを定義します。

await prisma.user.findMany({
where: {
email: {
contains: "alice@prisma.io",
},
},
cacheStrategy: {
swr: 60,
ttl: 60,
tags: ["emails_with_alice"],
},
});

サポートされているPrisma Clientオペレーション

以下は、cacheStrategyをサポートするすべての読み取りクエリオペレーションのリストです。

情報

cacheStrategyパラメータは、create()などの書き込みオペレーションではサポートされていません。

withAccelerateInfo

cacheStrategyをサポートするすべてのクエリは、レスポンスデータをラップし、Accelerateレスポンスに関する追加情報を含めるためにwithAccelerateInfo()を追加できます。

レスポンスのステータスを取得するには、次を使用します。

const { data, info } = await prisma.user
.count({
cacheStrategy: { ttl: 60, swr: 600 },
where: { myField: 'value' },
})
.withAccelerateInfo()

console.dir(info)
情報

レスポンスオブジェクトのinfoプロパティに注意してください。ここにリクエスト情報が格納されています。

戻り値の型

infoオブジェクトはAccelerateInfo型であり、以下のインターフェースに従います。

interface AccelerateInfo {
cacheStatus: 'ttl' | 'swr' | 'miss' | 'none'
lastModified: Date
region: string
requestId: string
signature: string
}
プロパティタイプ説明
cacheStatus"ttl" | "swr" | "miss" | "none"レスポンスのキャッシュステータス。
  • ttlは、ttl期間内のキャッシュヒットを示し、データベースクエリは実行されませんでした。
  • swrは、swr期間内のキャッシュヒットを示し、データはバックグラウンドでAccelerateによってリフレッシュされています。
  • missは、ttlswrの両方が期限切れになり、データベースクエリがリクエストによって実行されたことを示します。
  • noneは、キャッシュ戦略が指定されておらず、データベースクエリがリクエストによって実行されたことを示します。
lastModifiedDateレスポンスが最後にリフレッシュされた日付。
regionStringリクエストを受信したデータセンターリージョン。
requestIdStringリクエストの一意の識別子。トラブルシューティングに役立ちます。
signatureStringPrismaオペレーションの一意の署名。

$accelerate.invalidate

$accelerate.invalidate APIを使用してキャッシュを無効化できます。

注意

オンデマンドでキャッシュされたクエリ結果を無効化するには、有料プランが必要です。各プランには、1日に許可されるキャッシュタグベースの無効化の数に特定の制限がありますが、$accelerate.invalidate API自体を呼び出すことに制限はありません。詳細については、料金ページをご覧ください。

以下のクエリを無効化するには

await prisma.user.findMany({
where: {
email: {
contains: "alice@prisma.io",
},
},
cacheStrategy: {
swr: 60,
ttl: 60,
tags: ["emails_with_alice"],
},
});

$accelerate.invalidate APIでキャッシュタグを提供する必要があります。

try {
await prisma.$accelerate.invalidate({
tags: ["emails_with_alice"],
});
} catch (e) {
if (e instanceof Prisma.PrismaClientKnownRequestError) {
// The .code property can be accessed in a type-safe manner
if (e.code === "P6003") {
console.log(
"The cache invalidation rate limit has been reached. Please try again later."
);
}
}
throw e;
}
注意

1回の呼び出しで最大5つのタグを無効化できます。

$accelerate.invalidateAll

$accelerate.invalidateAll APIを使用して、キャッシュ全体を無効化できます。

以下のクエリを無効化するには

await prisma.user.findMany({
where: {
email: {
contains: "alice@prisma.io",
},
},
cacheStrategy: {
swr: 60,
ttl: 60,
tags: ["emails_with_alice"],
},
});

$accelerate.invalidateAll APIを呼び出すだけです。

try {
await prisma.$accelerate.invalidateAll();
} catch (e) {
if (e instanceof Prisma.PrismaClientKnownRequestError) {
if (e.code === "P6003") {
console.log(
"The cache invalidation rate limit has been reached. Please try again later."
);
}
}
throw e;
}

$accelerate.invalidateAllを使用する理由

このメソッドは、invalidate("all")などの代替手段よりも優れたエディターサポート(IntelliSenseなど)を提供します。

警告

これは環境全体のキャッシュをクリアします。注意して使用してください。

エラー

Prisma Accelerate関連のエラーは、P6xxxで始まります。

Prisma Accelerateの完全なエラーコードリファレンスは、こちらをご覧ください。