解决redisTemplate.opsForValue().get()返回null的常见问题
当使用redisTemplate.opsForValue().get()获取值时,却发现返回结果为null,这种情况在实际开发中经常遇到。许多开发者第一反应是去检查Redis中是否已经存有数据,但问题往往并不在于数据本身,而在于依赖注入的注解使用不当。

问题原因
根本原因在于依赖注入的方式选择有误。这里有两个容易混淆的注解,需要特别注意:
@Resource:Java自带的注解,功能较为丰富,当类型无法唯一匹配时,可以通过name属性指定具体的Bean名称。@Autowired:Spring框架的注解,核心功能单一,但如果类型匹配存在歧义,则需要配合@Qualifier注解手动指定。
在实际开发中,许多团队更倾向于使用@Autowired,并推荐采用构造函数注入的方式,这样既能保证依赖不可变,也便于单元测试。
回到问题本身:如果你用@Resource注入了RedisTemplate,而容器中同时存在多个同类型的Bean(例如多个Redis连接配置),就可能导致注入的不是你期望的那个实例,从而在调用get()时返回null。
解决方案
将@Resource注解替换为@Autowired,多数情况下问题即可迎刃而解。
当然,如果你坚持使用@Resource,也可以加上name属性明确指定Bean的名称,但相比之下@Autowired更简洁,也更符合Spring的惯用风格。
总结
这类问题虽然不算复杂,但很容易被忽略。从经验来看,排查Redis取值异常时,建议优先检查依赖注入的方式,通常能节省大量调试时间。
