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.
相关产品推荐
相关产品推荐

