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
パラメータは、以下のキーを持つオプションを受け取ります
オプション | 例 | 型 | 必須 | 説明 |
---|---|---|---|---|
swr | 60 | Int | いいえ | stale-while-revalidate の時間(秒単位)。 |
ttl | 60 | Int | いいえ | 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
をサポートするすべての読み取りクエリ操作のリストです
findUnique()
findUniqueOrThrow()
findFirst()
findFirstOrThrow()
findMany()
count()
aggregate()
groupBy()
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" | レスポンスのキャッシュステータス。
|
lastModified | Date | レスポンスが最後に更新された日付。 |
region | String | リクエストを受信したデータセンターリージョン。 |
requestId | String | リクエストの一意な識別子。トラブルシューティングに役立ちます。 |
signature | String | Prisma操作の一意な署名。 |
$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の完全なエラーコードリファレンスはこちらで確認できます。