优化代码:提高运费计算效率
优化代码:提高运费计算效率
这段代码主要用于计算商品的运费。以下提供一些优化建议,可以有效提高代码的执行效率:
1. 使用批量查询代替循环单个查询:
- 减少数据库访问次数:将循环中查询商品信息的代码改为一次性批量查询商品信息,例如使用
iProductApi.muchProductDetail()获取多个商品详情信息。 - 减少远程调用接口次数:将循环中查询模板信息的代码改为一次性批量查询模板信息,例如使用
yxShippingTemplatesRegionMapper.selectList()查询多个模板信息。 - 减少缓存访问次数:将循环中获取缓存数据的代码改为一次性批量获取缓存数据,例如使用
cache.getMultiple(PRODUCT_DETAIL_CACHE, productIds)获取多个商品信息。
2. 避免重复查询:
- 将模板信息查询放在循环外部进行:在循环开始前查询所有需要的模板信息,避免在循环中重复查询。
- 将商品信息查询放在循环外部进行:在循环开始前查询所有需要的商品信息,避免在循环中重复查询。
3. 使用缓存策略:
- 使用缓存保存查询结果:将查询结果缓存起来,避免重复查询,例如将商品信息和模板信息缓存到本地缓存或分布式缓存中。
4. 重构代码:
- 提取公共方法:将重复的代码抽取成方法,提高代码复用性和可读性。例如,可以将获取商品信息的逻辑提取成一个单独的方法。
示例代码优化:
List<FreightPriceDto> freightPriceDtoList = new LinkedList<>();
Map<Long, Integer> productMap = new LinkedHashMap<>();
List<Long> notTempIdProduct = new LinkedList<>();
// 1. 批量查询商品信息
Map<Long, ProductVo> productDetails = iProductApi.muchProductDetail(productIds, 1);
// 2. 使用缓存保存商品信息
productDetails.forEach((productId, productVo) -> {
if (productVo != null && productVo.getProductInfo() != null && productVo.getProductInfo().getTempId() != null) {
productMap.put(productId, productVo.getProductInfo().getTempId());
} else {
notTempIdProduct.add(productId);
}
});
// 3. 查询模板信息
List<YxShippingTemplatesRegion> yxShippingTemplatesRegion = templateRegionListLocalCache.get(TEMPLATE_REGION + tempId);
// 4. 使用缓存保存模板信息
if (CollectionUtil.isEmpty(yxShippingTemplatesRegion)) {
LambdaQueryWrapper<YxShippingTemplatesRegion> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YxShippingTemplatesRegion::getTempId, tempId);
yxShippingTemplatesRegion = yxShippingTemplatesRegionMapper.selectList(wrapper);
templateRegionListLocalCache.setLocalCache(key, yxShippingTemplatesRegion);
}
// 5. 循环计算运费
for (Long productId : productIds) {
FreightPriceDto freightPriceDto = new FreightPriceDto();
freightPriceDto.setProductId(productId);
freightPriceDto.setTemplatesRegions(yxShippingTemplatesRegion);
freightPriceDto.setRegionInfo(productUnDelivery(productMap.get(productId)));
freightPriceDtoList.add(freightPriceDto);
}
return freightPriceDtoList;
优化效果:
- 减少数据库访问次数和远程调用接口次数,提高代码执行效率。
- 使用缓存保存查询结果,减少重复查询次数,进一步提高效率。
- 代码更加简洁易懂,易于维护。
注意:
- 缓存策略需要根据实际情况进行调整,例如缓存大小、失效时间等。
- 批量查询和缓存的使用需要考虑数据量的大小和系统资源的限制。
- 代码优化需要结合具体的业务场景进行分析和设计。
原文地址: https://www.cveoy.top/t/topic/ovp6 著作权归作者所有。请勿转载和采集!