关于 serverpod-caching
serverpod-caching 是介绍 Serverpod 缓存 API 的开发技能,面向使用 Serverpod 的开发者。内容涵盖本地及 Redis 缓存、缓存未命中处理和失效注意事项。
主要功能
- 01本地内存缓存
- 02Redis 共享缓存
- 03缓存未命中时加载并存储
- 04缓存分组与键失效
适用场景
- 01缓存频繁读取的数据
- 02在启用 Redis 的实例间共享缓存
- 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