springboot緩存註解:爲 SpringBoot 項目接入基於 Redis 的 @CacheResult

前言

在已有 SpringBoot 服務里加緩存,常見做法是手寫 Redis 工具類或在每個查詢方法裏套一層 get/set。註解式緩存能減少重複代碼,但 Spring Cache 與業務約定的 key 規則、null 值語義、SpEL 定製 key 仍要自己對齊實現。下面介紹 SkillHub 社區技能 springboot緩存註解(座標 @user_faca7523/springboot-cache,版本 1.0.0):通過腳本把 @CacheResult、AOP 切面、Redis 配置和依賴一次性落到項目裏,適合在 springboot-init 生成的基礎結構上繼續擴展。

這是什麼

springboot緩存註解 是面向 SpringBoot 的 Agent Skill,發佈者爲 user_faca7523,分類爲 dev-programming,來源爲 community。技能目標很明確:爲 SpringBoot 項目添加基於 Redis 的緩存註解能力,用 @CacheResult 緩存方法返回值。

該技能聲明依賴 springboot-init 技能生成的基礎項目結構;單獨空倉庫若目錄與約定不一致,需要先具備對應骨架再執行腳本。

核心功能

@CacheResult 註解參數

參數 類型 默認值 說明
keyPrefix String project:cache 緩存 key 的前綴
key String "" 普通緩存 key
spelKey String "" SpEL 表達式緩存 key
cacheTime int 1 緩存時間
cacheTimeUnit TimeUnit TimeUnit.HOURS 緩存時間單位

Key 生成策略

  1. 優先普通 key:keyPrefix:key
  2. 次優先 SpEL:keyPrefix:解析SpEL表達式
  3. 默認:keyPrefix:類全限定名:方法名:AES(參數)(資料中默認策略描述爲對參數做 AES;技術特性一節同時說明使用 Hutool MD5 生成確定性 key,落地時以生成代碼爲準)

腳本會生成的工程內容

依賴(pom.xml)

  • cn.hutool:hutool-all
  • spring-boot-starter-data-redis
  • spring-boot-starter-aop

application.yml 會補充 Redis 連接項,例如:

spring:
  data:
    redis:
      host: localhost
      port: 6379
      password:
      database: 0
      timeout: 3000ms

新增或更新的 Java 文件

文件路徑 說明
annotation/CacheResult.java 緩存註解
common/CacheNullValue.java null 值標記類
util/CacheKeyGenerator.java Key 生成工具類
aspect/CacheResultAspect.java 緩存 AOP 切面
config/RedisConfig.java Redis 配置類

技術特性(官方說明)

  1. 使用 Hutool MD5 工具生成確定性 Key
  2. SpEL 支持 #參數名、#參數.屬性 等
  3. 通過 CacheNullValue 區分「未緩存」與「緩存了 null」
  4. 緩存操作失敗不影響業務執行
  5. 使用 GenericJackson2JsonRedisSerializer 序列化複雜對象

安裝與啓用

技能安裝後,典型路徑爲 .trae/skills/springboot-cache/。在具備 springboot-init 結構的項目根目錄執行腳本,爲指定 artifactId 與包名注入緩存能力:

python .trae/skills/springboot-cache/scripts/cache_annotation.py <artifactId> <packageName> [projectName] [springBootVersion] [author]

示例:

# 基本用法
python .trae/skills/springboot-cache/scripts/cache_annotation.py demo com.example

# 指定項目信息
python .trae/skills/springboot-cache/scripts/cache_annotation.py demo com.example Demo 3.5 wql

參數含義:artifactId、packageName 爲必填;projectName、springBootVersion、author 可選。執行前請確認本機 Redis 地址與 application.yml 中配置一致。資料未單獨列出 Cursor / Codex CLI / Claude Code 的差異步驟時,以 Skill 目錄內腳本與 SKILL.md 爲準。

SkillHub 頁面顯示該技能標籤 requires_api_key=false,無需額外 API Key。

典型用法

在 Service 或查詢方法上聲明 @CacheResult,按 key 策略三選一或組合時間與單位:

// 使用普通 key
@CacheResult(keyPrefix = "user:", key = "info")
public User getUser(Long userId) {
    // ...
}

// 使用 SpEL key
@CacheResult(keyPrefix = "user:", spelKey = "#userId")
public User getUser(Long userId) {
    // ...
}

// 使用默認 key,並設置 30 分鐘過期
@CacheResult(cacheTime = 30, cacheTimeUnit = TimeUnit.MINUTES)
public User getUser(Long userId) {
    // ...
}

經過上面的步驟,首次調用會走方法邏輯並寫入 Redis;相同 key 在有效期內由切面直接返回緩存。需要穿透或更新緩存時,應在業務層配合過期時間或自行擴展失效邏輯(技能資料未內置 @CacheEvict 類註解,以生成代碼能力爲界)。

適用場景與注意

適合

  • 已在或計劃用 springboot-init 搭好的 SpringBoot 項目,需要快速加上 Redis + 註解緩存
  • 希望統一 key 前綴、支持 SpEL、並處理 null 緩存語義的場景

注意

  1. 前置依賴:必須先有 springboot-init 約定的項目結構,否則腳本目標路徑可能對不齊。
  2. 運行環境:需要可用的 Redis;默認 localhost:6379,生產環境應改 host、密碼與 database。
  3. 序列化:複雜對象依賴 Jackson JSON 序列化,類型變更可能導致舊緩存反序列化失敗,改模型後宜清 key 或縮短 TTL。
  4. 失敗策略:緩存異常不阻斷業務,但可能造成短時擊穿到數據庫,需結合監控觀察 Redis 可用性。

結尾

springboot緩存註解 把 Redis 依賴、配置、@CacheResult 切面與 key 策略封裝成可腳本化的一步接入,適合在標準 SpringBoot 骨架上補緩存層。更多說明與安裝見 SkillHub:

  • API 文檔:https://api.skillhub.cn/user_faca7523/springboot-cache
  • 技能頁面:https://www.skillhub.cn/skills/user_faca7523/springboot-cache
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜