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

基本介绍

CacheService为插件提供作用域隔离的运行时缓存能力。插件通过services.Cache()获取该服务,缓存数据自动绑定到当前插件ID和租户范围,插件之间不会互相干扰。

该服务适用于插件内部的临时数据加速,如会话状态、计数器、热点数据等。缓存是失真性运行时加速数据,不应作为权限、配置、租户边界或业务记录的权威来源。

设计思路

CacheService采用命名空间+插件ID+租户ID三重隔离模型:

每个缓存操作都需要指定namespacekey。命名空间用于在同一插件内逻辑分组,键名在命名空间内唯一。宿主在实际存储时自动附加插件ID和租户ID前缀,确保跨插件和跨租户的隔离。

缓存支持两种值类型:

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

Incr方法专门用于整数缓存的原子递增,适用于访问计数、限流计数器等场景。

架构位置

CacheService位于插件业务层和宿主缓存后端之间,是插件缓存的唯一入口:

主要能力

方法说明
Get从指定命名空间读取未过期的缓存项
Set存储字符串值到指定命名空间,ttl=0表示不过期
Delete删除指定缓存项,删除不存在的项是成功的空操作
Incr原子递增整数缓存项,适用于计数器场景
Expire更新缓存项的过期策略,ttl=0清除过期

设计约束

  • 缓存是失真性数据。 缓存内容可能随时失效或被驱逐,不应作为权限判定、配置读取、租户边界或业务记录的权威来源。
  • 插件不应直接操作缓存键前缀。 宿主自动附加插件ID和租户ID前缀,插件只需关注命名空间和业务键名。
  • ttl=0的语义因方法而异。 Setttl=0表示不过期,Expirettl=0表示清除现有过期策略。
  • 缓存后端由宿主控制。 插件不能选择或配置缓存后端(内存、Redis等),由宿主统一管理。

相关服务

  • TenantFilterService - 缓存键中的租户隔离与TenantFilter的租户过滤互补
  • ConfigService - 配置是持久数据,缓存是失真性运行时数据