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

Spring Boot Redis CRUD Repository调用findById/findAll返回Optional.empty求助

问题根因

你自定义的RedisTemplate未配置明确的序列化规则,默认使用JdkSerializationRedisSerializer进行序列化/反序列化,反序列化时只要类信息、序列化ID等存在微小差异就会静默失败返回空,不会抛出异常,最终导致Repository的查询方法返回空结果。同时你当前的实体类缺少反序列化必需的无参构造函数,也会导致反序列化失败。

可行解决方案

步骤1:补充实体类无参构造

反序列化框架需要调用无参构造创建对象,你当前只添加了@AllArgsConstructor会覆盖默认无参构造,需要补充@NoArgsConstructor注解:

@Data
@NoArgsConstructor // 新增
@AllArgsConstructor
@RedisHash("OTPValidationLogCache")
@TypeAlias("OTPValidationLogCache") // 可选新增,明确类型别名避免反序列化类型匹配失败
public class OTPValidationLogCache {
    // 原有属性保持不变
    @Id
    @Indexed
    private String id;

    @Indexed
    private int validationFailureCount;
 
    @TimeToLive(unit = TimeUnit.MILLISECONDS)
    private long expiry;
}

步骤2:修正RedisTemplate序列化配置

修改RedisConfig中的redisTemplate Bean配置,明确指定key、value、hash结构的序列化器,推荐使用Jackson序列化器提升兼容性:

@Bean
public RedisTemplate<String, Object> redisTemplate() {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory());
    
    // 使用String序列化器序列化key
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    template.setKeySerializer(stringRedisSerializer);
    template.setHashKeySerializer(stringRedisSerializer);
    
    // 使用Jackson序列化器序列化value
    GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
    template.setValueSerializer(jackson2JsonRedisSerializer);
    template.setHashValueSerializer(jackson2JsonRedisSerializer);
    
    template.afterPropertiesSet();
    return template;
}

步骤3:(可选)检查依赖

如果项目没有引入Jackson相关依赖,需要在pom.xml中添加:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-json</artifactId>
</dependency>

修改完成后清空Redis中已存储的旧数据,重新写入后即可正常查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:33:03