当前位置: 首页 > news >正文

海南响应式网站建设制作被窝家装公司

海南响应式网站建设制作,被窝家装公司,怎么做推广比较成功,wordpress is_admin('edit.php')大家好#xff0c;最近看到京东云的一位大佬分享的接口优化方案#xff0c;感觉挺不错的#xff0c;拿来即用。建议收藏一波或者整理到自己的笔记本中#xff0c;随时查阅#xff01; 下面是正文。 一、背景 针对老项目#xff0c;去年做了许多降本增效的事情#xf…大家好最近看到京东云的一位大佬分享的接口优化方案感觉挺不错的拿来即用。建议收藏一波或者整理到自己的笔记本中随时查阅 下面是正文。 一、背景 针对老项目去年做了许多降本增效的事情其中发现最多的就是接口耗时过长的问题就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。 二、接口优化方案总结 1.批处理 批量思想批量操作数据库这个很好理解我们在循环插入场景的接口中可以在批处理执行完成后一次性插入或更新数据库避免多次 IO。 //for循环单笔入库 list.stream().forEatch(msg-{insert(); }); //批量入库 batchInsert(); 2. 异步处理 异步思想针对耗时比较长且不是结果必须的逻辑我们可以考虑放到异步执行这样能降低接口耗时。 例如一个理财的申购接口入账和写入申购文件是同步执行的因为是 T1 交易后面这两个逻辑其实不是结果必须的我们并不需要关注它的实时结果所以我们考虑把入账和写入申购文件改为异步处理。如图所示 至于异步的实现方式可以用线程池也可以用消息队列还可以用一些调度任务框架。 推荐一个开源免费的 Spring Boot 最全教程 https://github.com/javastacks/spring-boot-best-practice 3. 空间换时间 一个很好理解的空间换时间的例子是合理使用缓存针对一些频繁使用且不频繁变更的数据可以提前缓存起来需要时直接查缓存避免频繁地查询数据库或者重复计算。 需要注意的事这里用了合理二字因为空间换时间也是一把双刃剑需要综合考虑你的使用场景毕竟缓存带来的数据一致性问题也挺令人头疼。 这里的缓存可以是 R2M也可以是本地缓存、memcached或者 Map。 举一个股票工具的查询例子 因为策略轮动的调仓信息每周只更新一次所以原来的调接口就去查库的逻辑并不合理而且拿到调仓信息后需要经过复杂计算最终得出回测收益和跑赢沪深指数这些我们想要的结果。如果我们把查库操作和计算结果放入缓存可以节省很多的执行时间。如图 4. 预处理 也就是预取思想就是提前要把查询的数据提前计算好放入缓存或者表中的某个字段用的时候会大幅提高接口性能。跟上面那个例子很像但是关注点不同。 举个简单的例子理财产品会有根据净值计算年化收益率的数据展示需求利用净值去套用年化收益率计算公式计算的逻辑我们可以采用预处理这样每一次接口调用直接取对应字段就可以了。 另外如果你近期准备面试跳槽建议在Java面试库小程序在线刷题涵盖 2000 道 Java 面试题几乎覆盖了所有主流技术面试题。 5. 池化思想 我们都用过数据库连接池线程池等这就是池思想的体现它们解决的问题就是避免重复创建对象或创建连接可以重复利用避免不必要的损耗毕竟创建销毁也会占用时间。 池化思想包含但并不局限于以上两种总的来说池化思想的本质是预分配与循环使用明白这个原理后我们即使是在做一些业务场景的需求时也可以利用起来。 比如对象池 6. 串行改并行 串行就是当前执行逻辑必须等上一个执行逻辑结束之后才执行并行就是两个执行逻辑互不干扰所以并行相对来说就比较节省时间当然是建立在没有结果参数依赖的前提下。 比如理财的持仓信息展示接口我们既需要查询用户的账户信息也需要查询商品信息和 banner 位信息等等来渲染持仓页如果是串行基本上接口耗时就是累加的。如果是并行接口耗时将大大降低。 如图 7. 索引 加索引能大大提高数据查询效率这个在接口设计之出也会考虑到这里不再多赘述随着需求的迭代我们重点整理一下索引不生效的一些场景希望对小伙伴们有所帮助。 具体不生效场景不再一一举例后面有时间的话单独整理一下。 8. 避免大事务 所谓大事务问题就是运行时间较长的事务由于事务一致不提交会导致数据库连接被占用影响到别的请求访问数据库影响别的接口性能。 举个例子 Transactional(value taskTransactionManager, propagation Propagation.REQUIRED, isolation Isolation.READ_COMMITTED, rollbackFor {RuntimeException.class,Exception.class})publicBasicResultpurchaseRequest(PurchaseRecordrecord){BasicResult result newBasicResult();//插入账户任务taskMapper.insert(ManagerParamUtil.buildTask(record,TaskEnum.Task_type.pension_account.type(),TaskEnum.Account_bizType.purchase_request.type()));//插入同步任务taskMapper.insert(ManagerParamUtil.buildTask(record,TaskEnum.Task_type.pension_sync.type(),TaskEnum.Sync_bizType.purchase.type()));//插入影像件上传任务taskMapper.insert(ManagerParamUtil.buildTask(record,TaskEnum.Task_type.pension_sync.type(),TaskEnum.Sync_bizType.cert.type()));result.setInfo(ResultInfoEnum.SUCCESS);return result;} 上面这块代码主要是申购申请完成后执行一系列的后续操作如果现在新增申购完成后发送 push 通知用户的需求。很有可能我们会在后面直接追加如下图所示事务中嵌套 RPC 调用即非 DB 操作这些非 DB 操作如果耗时较大的话可能会出现大事务问题。大数据引发的问题主要有死锁、接口超时、主从延迟等。  Transactional(value taskTransactionManager, propagation Propagation.REQUIRED, isolation Isolation.READ_COMMITTED, rollbackFor {RuntimeException.class,Exception.class})publicBasicResultpurchaseRequest(PurchaseRecordrecord){BasicResult result newBasicResult();...pushRpc.doPush(record);result.setInfo(ResultInfoEnum.SUCCESS);return result;} 所以为避免大事务问题我们可以通过以下方案规避 1RPC 调用不放到事务里面 2查询操作尽量放到事务之外 3事务中避免处理太多数据 另外如果你近期准备面试跳槽建议在Java面试库小程序在线刷题涵盖 2000 道 Java 面试题几乎覆盖了所有主流技术面试题。 9. 优化程序结构 程序结构问题一般出现在多次需求迭代后代码叠加形成。会造成一些重复查询、多次创建对象等耗时问题。在多人维护一个项目时比较多见。解决起来也比较简单我们需要针对接口整体做重构评估每个代码块的作用和用途调整执行顺序。 10. 深分页问题 深分页问题比较常见分页我们一般最先想到的就是 limit 为什么会慢我们可以看下这个 SQL select*from purchase_record where productCode PA9044andstatus4orderby orderTime desclimit100000,200 limit 100000,200 意味着会扫描 100200 行然后返回 200 行丢弃掉前 100000 行。所以执行速度很慢。一般可以采用标签记录法来优化比如 select*from purchase_record where productCode PA9044andstatus4and id 100000limit200 这样优化的好处是命中了主键索引无论多少页性能都还不错但是局限性是需要一个连续自增的字段 11.SQL 优化 sql 优化能大幅提高接口的查询性能由于本文重点讲述接口优化的方案具体 sql 优化不再一一列举小伙伴们可以结合索引、分页、等关注点考虑优化方案。 12. 锁粒度避免过粗 锁一般是为了在高并发场景下保护共享资源采用的一种手段但是如果锁的粒度太粗会很影响接口性能。 关于锁粒度就是你要锁的范围有多大不管是 synchronized 还是 redis 分布式锁只需要在临界资源处加锁即可不涉及共享资源的不必要加锁就好比你要上卫生间只需要把卫生间的门锁上就可以不需要把客厅的门也锁上。 错误的加锁方式 //非共享资源 privatevoidnotShare(){ } //共享资源 privatevoidshare(){ } privateintwrong(){synchronized(this){share();notShare();} } 正确的加锁方式 //非共享资源 privatevoidnotShare(){ } //共享资源 privatevoidshare(){ } privateintright(){notShare();synchronized(this){share();} } 三、最后 我相信很多接口的效率问题不是一朝一夕形成的在需求迭代的过程中为了需求快速上线采取直接累加代码的方式去实现功能这样会造成以上这些接口性能问题。 变换思路更高一级思考问题站在接口设计者的角度去开发需求会避免很多这样的问题也是降本增效的一种行之有效的方式。
http://www.zqtcl.cn/news/928788/

相关文章:

  • 专注网站建设电商商城网站建设
  • 黄石专业网站建设推广一起做网店 网站打不开
  • 网站session 验证江西星子网
  • 成都高校网站建设服务公司小树建站平台
  • 宁波网站建设 慕枫科技顺德网站设计制作
  • 企业网站如何宣传wordpress 链接修改插件
  • 站长工具官网查询视频网站建设工具
  • 建设彩票网站制作网站服务器
  • 购物网站建设网站怎么购买国外的域名
  • 在线网站排名工具跨境电商卖什么产品最赚钱
  • 电商网页设计网站什么是网络营销产生的现实基础
  • 网站开发需要注意的阿里云做网站可以免备案吗
  • 网站开发后端菜鸟教程本地安装wordpress nginx
  • 网站做端口映射域名怎么做网站
  • 港口建设征收 申报网站网站内容建设与管理
  • 长沙企业网站建设较好的公司个人社保缴费比例
  • 网站备案信息页面惠安网站建设报价
  • 东莞做微网站建设十大免费软件下载
  • 做的很好的黑白网站成都小程序开发
  • 发布做任务网站wordpress新建用户
  • 郑州市东区建设环保局官方网站工作简历模板免费下载
  • 虾皮跨境电商网站公司网站建设费计入什么费用
  • 东光有做网站的吗公司装修图片大全
  • 一个域名下多个网站项目网手游
  • 网站建设竞价托管服务wordpress搬站流程
  • 做视频网站视频文件都存放在哪室内设计网站平台
  • 外贸网站建设网合肥网站设计公
  • 网站建设设计制作 熊掌号一键生成小程序商城
  • 北滘做网站企业展厅 设计 公司 平安
  • 网站做seo外链常州营销型网站建设