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

Spring Boot 3.2.2升级后Redis缓存出现Null key问题原因咨询

问题原因分析

这个问题的核心原因是Spring Boot 3.x依赖的Spring Framework 6.x,改变了方法参数名称的获取机制,和Jedis版本升级无关,具体细节如下:

  • 在Spring Boot 2.7.x(依赖Spring Framework 5.x)时期,Spring会通过ASM字节码分析工具,直接从类字节码中提取方法参数的真实变量名。哪怕编译代码时没有添加-parameters参数,Spring也能正确识别#username这种基于参数名的SpEL引用,生成有效的缓存key。

  • 升级到Spring Boot 3.x后,Spring Framework 6.x移除了ASM解析参数名称的逻辑,只能依赖JDK编译时的-parameters参数来保留参数的真实名称。如果项目编译配置里没开启这个参数,反射获取到的参数名称会变成arg0、arg1这类默认命名,此时#username就无法匹配到对应的参数,最终解析出的缓存key为null,触发Null key returned for cache operation错误。

而#a0能解决问题,是因为它是Spring Cache SpEL的参数索引引用语法:a0代表方法的第一个参数(索引从0开始),这种引用方式不依赖参数的真实名称,不管编译时是否保留参数名,都能准确定位到目标参数,所以不会出现key为null的情况。


补充验证与解决方向

如果想继续使用#username这类参数名引用,需要在编译配置中添加-parameters参数:

  • Maven项目:在maven-compiler-plugin中配置
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <parameters>true</parameters>
    </configuration>
</plugin>
  • Gradle项目:添加配置
tasks.withType(JavaCompile) {
    options.parameters = true
}

内容的提问来源于stack exchange,提问作者kernel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:27:33