接口性能優(yōu)化實(shí)戰(zhàn)

耗時(shí)接口的性能優(yōu)化

  1. 異步并發(fā)執(zhí)行,CompletableFuture,比如查詢商品詳情接口,需要查各種表,返回一個(gè)大的DTO,可以同時(shí)查 item、sku、spu、gnu,然后拼裝成一個(gè)DTO
  ProductUnitStructure productUnitStructure = productUnitEsSearch.searchByCondition(conditionMap);
    if (isEmpty(productUnitStructure)) {
        return RpcResponseResultUtil.successNoData();
    }
    Long gnuId = productUnitStructure.getGnuId();
    String spuCode = productUnitStructure.getSpuCode();
    String skuCode = productUnitStructure.getSkuCode();

    CompletableFuture<ProductStructure> productTask = CompletableFuture.supplyAsync(() -> productEsSearch.searchOneProductByCode(skuCode));
    CompletableFuture<ProductDrugStructure> gnuTask = CompletableFuture.supplyAsync(() -> drugGnuEsSearch.searchByGnuId(gnuId));
    CompletableFuture<ProductTemplateStructure> spuTask = CompletableFuture.supplyAsync(() -> productTemplateEsSearch.searchByCode(spuCode));
    CompletableFuture<Void> all = CompletableFuture.allOf(productTask, gnuTask, spuTask);
    all.get();

    ProductStructure productStructure = productTask.get();
    ProductTemplateStructure productTemplateStructure = spuTask.get();
    ProductDrugStructure productDrugStructure = gnuTask.get();
    if (ObjectUtils.isNotEmpty(productStructure)) {
        BeanCopyManualUtils.copySkuStructureToProductDetailDTO(productStructure, productDetailDTO);
    }
    if (ObjectUtils.isNotEmpty(productTemplateStructure)) {
        BeanCopyManualUtils.copySpuStructureToProductDetailDTO(productTemplateStructure, productDetailDTO);
    }
    if (ObjectUtils.isNotEmpty(productDrugStructure)) {
        BeanCopyManualUtils.copyGnuStructureToProductDetailDTO(productDrugStructure, productDetailDTO);
    }
    BeanCopyManualUtils.copyItemStructureToProductDetailDTO(productUnitStructure, productDetailDTO);
  1. 批量操作: list.parallelStream 多線程并發(fā)執(zhí)行
    思路一:一次查批量,思路二:一次查一個(gè),并發(fā)執(zhí)行查

    testList.parallelStream().forEach(element->{
        System.out.println(Thread.currentThread().toString()+element);
    });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容