MyBatis 使用 Redis 作为二级缓存时,缓存返回 {[]} 而不是 SensorDtl 集合对象

当使用 Redis 作为 MyBatis 的二级缓存时,有时你会发现缓存中存储的数据是一个空集合 {},而不是你期望的 SensorDtl 对象列表。 这是因为缓存中存储的数据格式可能与你期望的格式不一致,导致在读取时无法正确解析。

示例代码:

List<SensorDtl> sensorDtls = sensorDtlMapper.loadSensorDataByHistory(sensorDataQueryV3Vo);

解决方法:

  1. 配置 Redis 作为二级缓存: 在 MyBatis 配置文件中,添加 RedisCache 作为缓存类型。
<cache type='org.mybatis.caches.redis.RedisCache'/>
  1. 添加 @CacheNamespace 注解: 在 Mapper 接口中,添加 @CacheNamespace 注解,并指定缓存实现类为 RedisCache
@CacheNamespace(implementation = org.mybatis.caches.redis.RedisCache.class)
public interface SensorDtlMapper {
    // ...
}
  1. 确保 SensorDtl 类可序列化: 确保 SensorDtl 类实现了 Serializable 接口,以便在 Redis 中进行序列化和反序列化。
public class SensorDtl implements Serializable {
    // ...
}
  1. 配置序列化和反序列化方式: 如果你使用 Jackson 或其他 JSON 序列化库,确保正确配置序列化和反序列化方式。 在 MyBatis 配置文件中添加以下配置:
<configuration>
    <objectFactory type='org.mybatis.caches.redis.serialization.Jackson2SerializationFactory' />
</configuration>
  1. 检查 Mapper 接口返回值类型: 确保 loadSensorDataByHistory 方法的返回值类型为 List<SensorDtl>,而不是 {} 集合。
List<SensorDtl> loadSensorDataByHistory(SensorDataQueryV3Vo sensorDataQueryV3Vo);

完成以上步骤后,缓存中的数据应该能够正确解析,并返回正确的 List<SensorDtl> 集合对象。

注意:

  • 确保你的 Redis 实例正常运行,并且 MyBatis 可以连接到 Redis。
  • 如果使用其他 JSON 序列化库,请参考其文档配置序列化和反序列化方式。
  • 仔细检查代码,确保没有其他错误导致缓存问题。
MyBatis 二级缓存 Redis 问题:缓存返回 {[]} 而不是 SensorDtl 集合对象

原文地址: https://www.cveoy.top/t/topic/pdC3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录