You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring @Cacheable无额外配置时多参数DAO方法的缓存机制问询

Spring @Cacheable无额外配置时的多参数方法缓存行为解析

场景说明

当DAO方法仅标注@Cacheable("main")且未指定额外的value/key配置时,以以下方法为例:

@Cacheable("main") // 无额外配置
public Integer getDBValue(Integer param1, String param2, String param3) {
     // 数据库查询逻辑
}

若传入以下三组参数调用该方法:

2, "abc", "xyz";
10, "", "some string";
12, "abc", "some string 2";

你的理解完全正确

Spring会维护名为main的缓存实例,具体执行逻辑如下:

  • 缓存key生成规则:在未自定义key的情况下,Spring使用默认的SimpleKeyGenerator生成缓存key,该key会结合方法的全限定类名+方法名,以及所有入参的类型和实际值进行哈希计算,确保不同的参数组合对应唯一的key。
  • 缓存存储与匹配:你给出的三组参数组合会生成三个完全不同的缓存key,因此main缓存中会存储3条独立的缓存项。每次调用getDBValue()时,Spring会先根据当前参数生成的key去main缓存中查找:
    • 找到匹配的key则直接返回对应的缓存结果,不会执行方法内的数据库查询逻辑;
    • 找不到匹配的key则执行方法完成数据库查询,再将返回结果与当前key绑定后存入main缓存。

内容的提问来源于stack exchange,提问作者gene b.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:14:54