sql查询代码逻辑优化

直接上代码
		// 在for外查询 list
		List<QueAttr> byIds = queAttrService.findByIds(Lists.newArrayList(attrIds));
		Map<Long, String> attrId_name = byIds.stream().filter(Objects::nonNull)
				.collect(Collectors.toMap(QueAttr::getAttrId, QueAttr::getName));

		for (QueAttrPath queAttrPath : queAttrPaths) {
			List<Long> pathIds = queAttrPath.getPathIds();
			List<Map<String, String>> names = Lists.newArrayList();
			for (Long pathId : pathIds) {
				String name = attrId_name.get(pathId);// attrId
//				String name = queAttrService.getCacheAttr(pathId).getString("name"); for内查询 即使查询redis查询也比for外的耗时长
				if (StringUtils.isNotBlank(name)) {
					Map<String, String> _temp = Maps.newHashMap();
					_temp.put("attrId", pathId.toString());
					_temp.put("name", name);
					names.add(_temp);
				}
			}
			queAttrPath.setName(names);
		}

总结:
1.for内的循环查库尽量避免
2.循环操作单次redis命令时间= n次网络往返+ n次命令执行,所以也是比较耗时的,可以根据业务场景考虑使用pipeline执行N条命令,来减少网络时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值