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

APIリファレンス

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

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

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

cacheStrategy

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

オプション

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

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

クエリにキャッシュ戦略を追加し、60秒間のSWR (stale-while-revalidate) 値、60秒間のTTL (time-to-live) 値、および"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)を提供します。

警告

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

カスタムFetch実装の提供

Accelerateバージョン2.0.0以降、Prisma ClientをAccelerateで拡張する際に、fetch関数のカスタム実装を提供できます。これにより、アプリケーション内でHTTPリクエストがどのように処理されるかについて、より大きな柔軟性と制御が可能になります。

カスタムfetch実装を渡すには、以下のパターンを使用できます

const myFetch = (input: URL, init?: RequestInit): Promise<Response> => {
// Your custom fetch logic here
return fetch(input, init);
};

const prisma = new PrismaClient().$extends(withAccelerate({ fetch: myFetch }));

エラー

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

Prisma Accelerateの完全なエラーコードリファレンスはこちらで確認できます。

© . All rights reserved.