APIリファレンス
Prisma Postgres APIリファレンスドキュメントは以下のスキーマに基づいています
model User {
id Int @id @default(autoincrement())
name String?
email String @unique
}
すべての例はUser
モデルに基づいています。
cacheStrategy
Prisma Postgres用Prismaクライアント拡張機能を使用すると、モデルクエリにcacheStrategy
パラメータを使用し、ttl
およびswr
パラメータを使用してPrisma Postgresクエリのキャッシュ戦略を定義できます。クライアント拡張機能にはPrisma Clientバージョン4.10.0
のインストールが必要です。
オプション
cacheStrategy
パラメータは以下のキーを持つオプションを受け取ります
オプション | 例 | 型 | 必須 | 説明 |
---|---|---|---|---|
swr | 60 | Int | いいえ | stale-while-revalidateの時間(秒単位)。 |
ttl | 60 | Int | いいえ | 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
をサポートするすべての読み取りクエリ操作のリストです。
findUnique()
findUniqueOrThrow()
findFirst()
findFirstOrThrow()
findMany()
count()
aggregate()
groupBy()
cacheStrategy
パラメータは、create()
などの書き込み操作ではサポートされていません。
withAccelerateInfo
cacheStrategy
をサポートする任意のクエリは、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)を提供します。
これは環境全体のキャッシュをクリアします。注意して使用してください。
エラー
Prisma Postgres関連のエラーはP6xxx
で始まります。
Prisma Postgresの完全なエラーコードリファレンスはこちらで確認できます。