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

SpringBoot中RedisTemplate操作Redis时值为Null的问题修复咨询

修复Redis存入值为Null的问题

问题根源

当前代码的核心逻辑完全错误:

  1. putCache方法里先尝试从Redis读取指定key的值,但这个key还没被存入任何数据,所以value必然是null
  2. 随后你把这个null值存入Redis的Hash结构,最终导致Redis里的值全为null
  3. 调用putCache时仅传入了分类编码,根本没把从数据库获取的SpriteEntity业务数据传进去

修复方案

1. 重构putCache方法

调整方法参数,接收实际要存入的业务数据,不再读取Redis中不存在的值:

public void putCache(String categoryCode, String subCategoryCode, String value)  {
    // 用主分类编码作为Hash的键,子分类编码作为Hash的字段,更符合Hash的使用场景
    String hashKey = REDIS_KEY + categoryCode;
    redisTemplate.opsForHash().put(hashKey, subCategoryCode, value);
}

2. 修改调用逻辑,传入数据库的实际数据

在spriteGetData中,从SpriteEntity取出需要缓存的业务数据(比如实体的JSON字符串,或某个具体字段),再调用putCache:

public void spriteGetData() {
    List<SpriteEntity> spriteEntities = spriteRepo.findAll();
    for (SpriteEntity entity : spriteEntities) {
        String categoryCode = entity.getCategoryCode();
        String subCategoryCode = entity.getSubCategoryCode();
        // 示例:将实体转为JSON字符串存入,你可以替换为实际需要的字段(如entity.getSpriteName())
        String cacheValue = objectMapper.writeValueAsString(entity);
        redisService.putCache(categoryCode, subCategoryCode, cacheValue);
    }
}

额外检查项

  • 确保objectMapper已正确注入(若用JSON序列化)
  • 确认redisTemplate的连接配置正常,能正常访问Redis服务
  • 若需要缓存过期,可在存入后添加redisTemplate.expire(hashKey, 2, TimeUnit.HOURS)这类设置过期时间的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:35:24