跳到主要内容
版本:0.4.x(Latest)

基本介绍

源码插件通过services.Cache()使用缓存能力。动态插件通过plugin.yaml声明service: cache后使用pluginbridge.Default().Cache()客户端。

缓存自动绑定插件身份和租户范围。插件只需传入业务命名空间和键名,不应拼接宿主缓存前缀。

能力阶段:运行期

类型支持:源码插件、动态插件

能力设计

缓存值类型

CacheItem支持两类值:

值类型常量说明
字符串CacheValueKindString通用文本缓存
整数CacheValueKindInt计数器或序列号

作用域隔离

缓存自动绑定插件ID和租户范围,不同插件和不同租户之间的缓存天然隔离。插件只需传入业务命名空间和键名,宿主负责前缀拼接和范围限定。

易失性数据语义

缓存是易失数据,可能会过期、被淘汰或丢失,不应作为权限、租户边界、配置、插件状态或业务记录的权威来源。后端由宿主控制,插件不能选择内存、Redis或其他缓存后端。

接口定义

源码插件接口

方法说明
Get读取未过期缓存项,返回CacheItem和是否命中
Set写入字符串缓存,ttl=0表示不过期
Delete删除缓存项,缺失时为空操作
Incrdelta递增整数缓存,适合计数器
Expire更新过期策略,ttl=0表示清除过期

动态插件接口

动态方法动态SDK方法说明
getCache().Get读取未过期缓存项
setCache().Set写入字符串缓存
deleteCache().Delete删除缓存项
incrCache().Incr递增整数缓存
expireCache().Expire更新过期策略

能力使用

源码插件使用

源码插件通过services.Cache()操作缓存,命名空间用于插件内部逻辑分组:

// 写入缓存
item, err := services.Cache().Set(ctx, "reports", "last_generated", value, time.Hour)

// 读取缓存
item, hit, err := services.Cache().Get(ctx, "reports", "last_generated")

// 递增计数器
countItem, err := services.Cache().Incr(ctx, "reports", "export_count", 1, time.Hour)

// 删除缓存
err := services.Cache().Delete(ctx, "reports", "last_generated")

动态插件使用

动态插件在plugin.yaml中声明缓存服务和授权资源:

hostServices:
- service: cache
methods:
- get
- set
- delete
- incr
- expire
resources:
- ref: plugin:reports

cache是资源型服务,必须声明resources[].ref。资源引用的具体命名策略由宿主治理约定,插件应使用清晰、稳定的业务场景名。在动态插件侧使用:

// 写入缓存
item, err := pluginbridge.Default().Cache().Set(ctx, "reports", "last_generated", value, time.Hour)

// 读取缓存
item, hit, err := pluginbridge.Default().Cache().Get(ctx, "reports", "last_generated")

设计约束

  • 缓存是易失数据。 缓存可能过期、被淘汰或丢失,不应作为权限、租户边界、配置、插件状态或业务记录的权威来源。
  • 命名空间由插件定义。 namespace用于插件内部逻辑分组,宿主会额外绑定插件和租户范围。
  • ttl=0语义取决于方法。 Set中表示不过期,Expire中表示清除过期策略。
  • 后端由宿主控制。 插件不能选择内存、Redis或其他缓存后端。

相关服务