Skip to content

受管注解缓存

受管注解缓存是 Forge Admin 在 forge-starter-cache 中提供的声明式 + 运行时治理缓存能力:开发者用注解声明缓存与代码默认策略,运维在管理后台按「缓存名 + 应用」覆盖运行策略(模式、TTL、容量、空值缓存),并受代码不可变安全边界约束。

核心概念

概念说明
缓存定义@ForgeCacheConfig 在类型上声明的命名缓存,含默认策略与安全边界
缓存注解@ForgeCacheable / @ForgeCachePut / @ForgeCacheEvict 在方法上的缓存操作
存储模式CacheMode:LOCAL(本地)/ REDIS / MULTI(多级)
身份隔离范围CacheScope:GLOBAL / TENANT / TENANT_USER / TENANT_USER_ORG
运行策略sys_cache_policy 表,按「应用编码 + 缓存名」覆盖代码默认策略

声明缓存

1. 声明缓存定义

在类型上用 @ForgeCacheConfig(可重复,@Inherited)声明命名缓存:

java
@ForgeCacheConfig(
    name = "sys_dict_data",
    description = "字典数据缓存",
    mode = CacheMode.REDIS,                 // 默认存储模式
    allowedModes = {CacheMode.LOCAL, CacheMode.REDIS, CacheMode.MULTI}, // 不可变安全边界
    scope = CacheScope.TENANT,              // 键隔离范围
    redisTtlSeconds = 1800,
    localTtlSeconds = 60,
    localMaxSize = 1000,
    cacheNull = false,
    nullTtlSeconds = 30
)
@Service
public class SysDictDataService { ... }
属性默认值说明
name—(必填)缓存名
description""缓存描述
modeREDIS默认存储模式
allowedModesLOCAL/REDIS/MULTI代码声明的不可变安全边界,运行时不能越界
scopeTENANT缓存键身份隔离范围
redisTtlSeconds1800Redis TTL(秒)
localTtlSeconds60本地 TTL(秒)
localMaxSize1000本地缓存容量
cacheNullfalse是否缓存空值
nullTtlSeconds30空值 TTL(秒)

2. 使用缓存注解

java
@ForgeCacheable(cacheName = "sys_dict_data", key = "#dictType")
public List<SysDictData> listByType(String dictType) { ... }

@ForgeCachePut(cacheName = "sys_dict_data", key = "#vo.dictType")
public void update(...) { ... }

@ForgeCacheEvict(cacheName = "sys_dict_data", key = "#dictType")
public void remove(String dictType) { ... }

// 全量失效
@ForgeCacheEvict(cacheName = "sys_dict_data", allEntries = true)
public void clearAll() { ... }
注解属性说明
@ForgeCacheablecacheNamekey命中即返回缓存,未命中回源并写入
@ForgeCachePutcacheNamekey强制写入缓存
@ForgeCacheEvictcacheNamekeyallEntries失效指定键或全量失效

key 支持 SpEL 表达式(如 #dictType),留空走默认键策略。

配置项

受管缓存配置前缀为 forge.cache

配置默认值说明
forge.cache.annotation-enabledtrue是否启用注解拦截,关闭后业务方法全部穿透
forge.cache.application-codespring.application.name应用编码
forge.cache.namespaceforge:managed-cacheRedis 控制面和数据对象前缀
forge.cache.policy-refresh-seconds30Pub/Sub 丢失时重新校准策略快照的最小间隔

运行策略治理

运行策略存放在 sys_cache_policy 表,按「应用编码 + 缓存名」唯一约束:

字段说明
application_code应用编码
cache_name缓存名
enabled是否启用
cache_modeLOCAL / REDIS / MULTI
local_ttl_seconds / redis_ttl_seconds本地 / Redis TTL
local_max_size本地容量
cache_null / null_ttl_seconds空值缓存与 TTL
policy_version策略版本(乐观并发控制)

管理接口

受管缓存策略接口在 /system/cache/policy 下,仅超级管理员可调用:

接口说明
GET /page分页查询受管缓存策略
POST /edit修改运行策略
POST /reset恢复默认策略(applicationCode + cacheName
POST /clear清空受管缓存(applicationCode + cacheName

管理后台入口为 平台管理 > 运维监控 > 缓存监控,可查看各缓存的运行策略、过期策略、容量 / 空值配置与运行统计,并在线编辑、重置、清空。

安全边界

  • allowedModes代码声明的不可变安全边界,运行时策略只能在其范围内选择,不能越界改模式。
  • 缓存名与允许模式仍由代码定义约束,管理端只覆盖 TTL、容量、空值与启用状态。
  • 策略变更通过 policy_version 乐观并发控制,避免并发覆盖。
  • 仅超级管理员可管理策略;关闭 annotation-enabled 后所有受管缓存方法穿透执行。

相关文档

Forge Admin — 基于 Vue3 + Spring Boot 的企业级后台管理框架