欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 若依使用RedisCache需要注意的事项

若依使用RedisCache需要注意的事项

2025/6/13 5:15:08 来源:https://blog.csdn.net/weixin_51480428/article/details/148562455  浏览:    关键词:若依使用RedisCache需要注意的事项

存入redis对象的时候会带一个@type字段,此处需要注意

在这里插入图片描述

存入方:

此处需要注意,存入redis的时候会带一个@type,也就是类的路径名

redisCache.setCacheObject(screenPlayQueueName, userDemondDto,userDemondDto.getPlayDuration().intValue(), TimeUnit.SECONDS);package com.pmkz.core.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;
/*** @version 1.0* @description* @date 2025/5/26 16:57*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserOnDemandDto {private Long reId; //资源idprivate String isLoopPlay; //是否循环播放private Long timestamp;private Long userId;private String contentType;private Long playDuration; //持续时间为s@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date displayTime; //开始时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date displayEndTime; //结束时间private double longitude; //经度private double latitude; //纬度private Long logId;//日志id
}
取出方

此处可以看出取出方的类的路径名与存入redis的不一致,就会出现类型转换的错误

 UserOnDemandDto userOnDemandDtoCache = redisCache.getCacheObject(screenPlayQueueName);package com.lxsq.service.dto;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.math.BigDecimal;
import java.util.Date;/*** @author 陈丹阳* @version 1.0* @description* @date 2025/6/9 8:57*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserOnDemandDto {private Long reId; //资源idprivate String isLoopPlay; //是否循环播放private Long timestamp;private Long userId;private String contentType;private Long playDuration; //持续时间为s@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date displayTime; //开始时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date displayEndTime; //结束时间private double longitude; //经度private double latitude; //纬度private Long logId;//日志id
}
临时解决方法
        Object result  = redisCache.getCacheObject(screenPlayQueueName);if (result instanceof String) {String jsonStr = (String) result;// 移除@type信息jsonStr = jsonStr.replaceAll("\"@type\":\"[^\"]+\",?", "");jsonStr = jsonStr.replaceAll(",}", "}").replaceAll(",]", "]");// 转换为目标对象userOnDemandDtoCache = JSON.parseObject(jsonStr, UserOnDemandDto.class);}
永久解决办法(在RedisConfig中进行配置)
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(connectionFactory);// 配置FastJson的ParserConfigParserConfig parserConfig = new ParserConfig();parserConfig.setAutoTypeSupport(true); // 开启自动类型支持parserConfig.addAccept("com.yourpackage."); // 添加允许的包名前缀FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);serializer.setFastJsonConfig(new FastJsonConfig());serializer.getFastJsonConfig().setParserConfig(parserConfig);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(serializer);template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(serializer);template.afterPropertiesSet();return template;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词