MyBatis 二级缓存 Redis 问题:缓存返回 {[]} 而不是 SensorDtl 集合对象
MyBatis 使用 Redis 作为二级缓存时,缓存返回 {[]} 而不是 SensorDtl 集合对象
当使用 Redis 作为 MyBatis 的二级缓存时,有时你会发现缓存中存储的数据是一个空集合 {},而不是你期望的 SensorDtl 对象列表。 这是因为缓存中存储的数据格式可能与你期望的格式不一致,导致在读取时无法正确解析。
示例代码:
List<SensorDtl> sensorDtls = sensorDtlMapper.loadSensorDataByHistory(sensorDataQueryV3Vo);
解决方法:
- 配置 Redis 作为二级缓存: 在 MyBatis 配置文件中,添加
RedisCache作为缓存类型。
<cache type='org.mybatis.caches.redis.RedisCache'/>
- 添加
@CacheNamespace注解: 在 Mapper 接口中,添加@CacheNamespace注解,并指定缓存实现类为RedisCache。
@CacheNamespace(implementation = org.mybatis.caches.redis.RedisCache.class)
public interface SensorDtlMapper {
// ...
}
- 确保
SensorDtl类可序列化: 确保SensorDtl类实现了Serializable接口,以便在 Redis 中进行序列化和反序列化。
public class SensorDtl implements Serializable {
// ...
}
- 配置序列化和反序列化方式: 如果你使用 Jackson 或其他 JSON 序列化库,确保正确配置序列化和反序列化方式。 在 MyBatis 配置文件中添加以下配置:
<configuration>
<objectFactory type='org.mybatis.caches.redis.serialization.Jackson2SerializationFactory' />
</configuration>
- 检查 Mapper 接口返回值类型: 确保
loadSensorDataByHistory方法的返回值类型为List<SensorDtl>,而不是{}集合。
List<SensorDtl> loadSensorDataByHistory(SensorDataQueryV3Vo sensorDataQueryV3Vo);
完成以上步骤后,缓存中的数据应该能够正确解析,并返回正确的 List<SensorDtl> 集合对象。
注意:
- 确保你的 Redis 实例正常运行,并且 MyBatis 可以连接到 Redis。
- 如果使用其他 JSON 序列化库,请参考其文档配置序列化和反序列化方式。
- 仔细检查代码,确保没有其他错误导致缓存问题。
原文地址: https://www.cveoy.top/t/topic/pdC3 著作权归作者所有。请勿转载和采集!