前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >服务端性能优化之异步查询转同步

服务端性能优化之异步查询转同步

作者头像
FunTester
发布2020-02-17 16:18:00
5000
发布2020-02-17 16:18:00
举报
文章被收录于专栏:FunTesterFunTester

之前写过一篇文章分享了我在工作中遇到了一个因为性能优化出现的一个BUG:异步查询转同步加redis业务实现的BUG分享

最近又遇到了类似的任务,有一些多查询的接口很适合这种异步查询转同步的优化方案,所以分享一下服务端接口性能优化中用到的这个方案。

个人认为适合该方案的查询接口(涉及写入数据的另外再写)具备一下几个特点:

  • 多次查询
  • 一次查询时间较长
  • 相互不依赖返回结果

伪代码如下:

代码语言:javascript
复制
@Overridepublic void doExecute(Map<String, Object> dataMap) {
        doSomething(dataMap);
        CountDownLatch countDownLatch = new CountDownLatch(3);
        teacherPadAsyncService.do1(dataMap, countDownLatch, params);
        teacherPadAsyncService.do2(dataMap, countDownLatch, params);
        teacherPadAsyncService.do3(dataMap, countDownLatch, params);
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            logger.error("异步处理线程异常", e);
        }
    }

实现方法很简单,通过spring的@Async注解,这里需要修改一些配置,不再赘述,要注意线程安全。

代码语言:javascript
复制
@Asyncpublic void do1(Map<String, Object> dataMap, CountDownLatch countDownLatch, Params params) {
        try {
            dosomething(dataMap, params);
        } catch (Exception e) {
            dosomething();
        } finally {
            countDownLatch.countDown();
        }
    }

这也算是一个常规的优化方案,以后有机会再分享一下其他优化方案。


  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档