mcpField
S
serverpod-caching

serverpod-caching

github.com/serverpod开发3.3k44 次安装1 天前更新
代码仓库

关于 serverpod-caching

serverpod-caching 是介绍 Serverpod 缓存 API 的开发技能,面向使用 Serverpod 的开发者。内容涵盖本地及 Redis 缓存、缓存未命中处理和失效注意事项。

主要功能

  1. 01本地内存缓存
  2. 02Redis 共享缓存
  3. 03缓存未命中时加载并存储
  4. 04缓存分组与键失效

适用场景

  1. 01缓存频繁读取的数据
  2. 02在启用 Redis 的实例间共享缓存
  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 按键使这些条目失效。

评论

支持 Markdown