serverpod-caching について
serverpod-cachingは、Serverpodを使う開発者向けにキャッシュAPIを解説する開発スキルです。ローカルキャッシュとRedisキャッシュ、キャッシュミス時の処理、無効化の注意点を扱います。
主な機能
- 01ローカルメモリキャッシュ
- 02Redis共有キャッシュ
- 03ミス時の読み込みと保存
- 04グループ・キー単位の無効化
活用シーン
- 01頻繁に参照するデータのキャッシュ
- 02Redis有効なインスタンス間での共有
- 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でキーごとに無効化してください。
コメント
Markdown 対応