Impala推送数据到Redis及String.valueOf()生产问题踩坑
  TEZNKK3IfmPf 2023年11月13日 26 0

Impala数据推送到Redis,平台业务使用方反馈插入到Redis的数据不对:

Impala推送数据到Redis及String.valueOf()生产问题踩坑

 

Redis插入key没有问题;value是​​0.6nul​​​有问题,正常的数据应该是​​0.6​​。

问题排查

代码片段如下:

private void pushToRedis(Map query, List<Map<String, Object>> datalist) {
JedisCluster redisCluster = this.getConnection();
String[] columnArr = (query.get(COLUMN) + "").replace("\n", "").replace(" ", "").split(",");
String keyTo = String.valueOf(query.get("keyTo"));
String valueSplit = String.valueOf(query.get("valueSplit"));
if (StringUtils.isEmpty(valueSplit)) {
// 默认分隔符
valueSplit = ",";
}
Object redisExpireObj = query.get("redisExpire");
SetParams setParams;
if (StringUtil.isNotNullOrEmpty(redisExpireObj)) {
setParams = SetParams.setParams().ex(Integer.parseInt(redisExpireObj + ""));
} else {
setParams = SetParams.setParams();
}
for (Map<String, Object> item : datalist) {
StringBuilder sb = new StringBuilder();
for (String s : columnArr) {
sb.append(item.get(s)).append(valueSplit);
}
String objectKey = String.valueOf(item.get(keyTo));
redisCluster.set(objectKey, sb.substring(0, sb.toString().length() - 1), setParams);
}
}

​datalist​​是Impala里面查询得到的数据。其结果来自于如下SQL语句:

select concat('fqz_appscore_list_yxd:', cast(appname AS string) ) as keyname, appscore from fqz.Yxd_AppScore_List;

执行SQL,获取得到的数据,无论是key,还是value都是正常的。value没有带多余的​​nul​​。

说明数据源是正常的。

问题出现在推送到Redis的逻辑代码处,即上面的Java代码。

而key是没有问题,只要value有问题,最终落值的value为:​​sb.substring(0, sb.toString().length() - 1​​。

中间赋值的地方为:​​sb.append(item.get(s)).append(valueSplit);​

说明,问题在于这个​​valueSplit​​​。再看下数据库原始数据,即​​Map query​​这个map。

{
"redisExpire": "172800",
"column": "appscore",
"keyTo": "keyname"
}

并没有​​valueSplit​​​这个字段,​​query.get("valueSplit")​​​的结果为​​null​​,好家伙!!

再看下​​String.valueOf()​​源码:

/**
* Returns the string representation of the {@code Object} argument.
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}

问题定位到。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   23   0   0 redis用户
  TEZNKK3IfmPf   2024年05月31日   27   0   0 dataredis
  TEZNKK3IfmPf   17天前   40   0   0 java
  TEZNKK3IfmPf   2024年05月31日   23   0   0 awkredis
TEZNKK3IfmPf