mcpField
S
serverpod-caching

serverpod-caching

github.com/serverpod開発3.3k44 回インストール1 日前に更新
リポジトリ

serverpod-caching について

serverpod-cachingは、Serverpodを使う開発者向けにキャッシュAPIを解説する開発スキルです。ローカルキャッシュとRedisキャッシュ、キャッシュミス時の処理、無効化の注意点を扱います。

主な機能

  1. 01ローカルメモリキャッシュ
  2. 02Redis共有キャッシュ
  3. 03ミス時の読み込みと保存
  4. 04グループ・キー単位の無効化

活用シーン

  1. 01頻繁に参照するデータのキャッシュ
  2. 02Redis有効なインスタンス間での共有
  3. 03有効期間の設定によるキャッシュ増加の抑制

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/serverpod/serverpod --skill serverpod-caching

インストール後、Claude Code で/serverpod-cachingを入力して読み込まれたか確認します。

詳細

Serverpod キャッシュ

session.caches を介したインメモリキャッシュと、オプションの Redis キャッシュです。キャッシュするオブジェクトは、シリアライズ可能なモデルか、Serverpod がサポートするプリミティブである必要があります。

キャッシュの種類

  • session.caches.local — 現在のサーバーインスタンス内のインメモリキャッシュ
  • session.caches.localPrio — 頻繁にアクセスされるエントリ向けのインメモリキャッシュ
  • session.caches.global — インスタンス間で共有される Redis ベースのキャッシュ(Redis の設定が必要です。Redis が有効でない場合は使用しないでください)
  • session.caches.query — 生成されたデータベースヘルパーが使用するローカルクエリーキャッシュ

基本的な使い方

await session.caches.local.put('UserData-$userId', userData,
  lifetime: Duration(minutes: 5));

var userData = await session.caches.local.get<UserData>('UserData-$userId');

CacheMissHandler

キャッシュミス時に読み込み、結果を自動的に保存します。

var userData = await session.caches.local.get(
  'UserData-$userId',
  CacheMissHandler(
    () async => UserData.db.findById(session, userId),
    lifetime: Duration(minutes: 5),
  ),
);

ハンドラーが null を返した場合、null を返します(何も保存されません)。

コレクションとプリミティブ

await session.caches.local.put('userCount', 17, lifetime: Duration(minutes: 5));
var count = await session.caches.local.get<int>('userCount');

該当する場合は、無制限に増加しないよう 有効期間 を設定します。安定した一意のキー(例:'EntityName-$id')を使用してください。

注意点

  • session.caches.global は Redis が有効であることを前提としています。安全な何もしないフォールバックではありません。
  • キャッシュグループ(put(..., group: 'name') + invalidateGroup('name'))はローカルキャッシュでのみ機能します。Redis ベースのグローバルキャッシュで invalidateGroup を呼び出すと UnimplementedError がスローされるため、該当するエントリは invalidateKey でキーごとに無効化してください。

コメント