![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
性能优化
文章平均质量分 66
性能优化
乐之者v
一生编程,快乐编程。
展开
-
接口报错401Unauthorized
接口报错401 Unauthorized401 UnauthorizedThis server could not verify that you are authorized to access the document you requested.错误原因状态码 401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。简单点...原创 2022-07-28 15:00:00 · 6216 阅读 · 0 评论 -
接口性能优化
一、耗时统计在做接口的性能优化时,最重要的是知道时间消耗在哪里。可以用StopWatch,进行耗时统计。详情见: https://www.cnblogs.com/expiator/p/17045089.html二、链路追踪如果团队使用了Skywalking,可以用来进行链路追踪,耗时统计。时间主要消耗在哪些服务,哪些方法,通过traceid一看便知。Skywalking非常有用,哪...原创 2023-02-05 23:22:00 · 61 阅读 · 0 评论 -
耗时统计--StopWatch
耗时统计在做性能优化的时候,耗时统计非常有用。分析出时间主要消耗在哪里,才能够做出相应的优化。System.currentTimeMillis()平常我们在做耗时统计时,经常会用 System.currentTimeMillis(),如下:long start = System.currentTimeMillis(); //其他逻辑 long end =...原创 2023-01-11 22:25:00 · 124 阅读 · 0 评论 -
CompletableFuture多任务异步,获取返回值,汇总结果
supplyAsync(): 异步处理任务,有返回值whenComplete():任务完成后触发,该方法有返回值。还有两个参数,第一个参数是任务的返回值,第二个参数是异常。allOf():就是所有任务都完成时触发。allOf()可以配合get()一起使用。/*** 异步,多任务。汇总返回值*///该线程池仅用于示例,实际建议使用自定义的线程池//线程安全的list,适合写多读少的场景//任务完成时执行。用list存放任务的返回值if (result!= null) {原创 2023-10-20 22:55:33 · 3436 阅读 · 0 评论 -
Java8 CompletableFuture处理多个异步任务
thenAcceptBoth(): 同样将两个任务(CompletableFuture)的执行结果作为方法入参,但是是个Void的返回值,相当于没有返回值;runAfterBoth(): 在两个任务(CompletableFuture)之后执行,但没有入参,而且是个Void的返回值,相当于没有返回值。thenRun(): 根本不关心一个任务的前一阶段的输出,它只负责运行新的Runnable任务,该方法返回值类型为Void,相当于没有返回值。还有两个参数,第一个参数是任务的返回值,第二个参数是异常。原创 2023-09-11 23:16:58 · 657 阅读 · 0 评论 -
接口报错504 Gateway Time out
接口报错504 gateway timeout504 gateway timeout,就是接口超时了。比如 nginx配置超时时间过短,前端设置了time out,或者是接口响应时间过长。nginx配置504 gateway timeout,有可能是nginx代理时,配置的超时时间过短。http { proxy_connect_timeout 300; #单位秒 prox...原创 2022-06-19 23:13:00 · 1703 阅读 · 0 评论 -
SpringBoot异步及线程池配置
异步方法注解@Async在SpringBoot中进行异步处理,可以使用异步注解@Async和@EnableAsync。@Async注解表示异步,如:@Async("asyncServiceExecutor"),后面的参数asyncServiceExecutor对应于自定义的线程池配置类(在以下例子中为ExecutorConfig) 中的线程池方法名如果不写后面的参数,直接用@Async,...原创 2019-07-03 18:55:00 · 40 阅读 · 0 评论 -
java线程池异步
什么时候使用异步?处理多个任务,某些任务比较耗时,可以用异步。异步线程新建一个类,实现Callable接口,重写call()方法。异步任务的结果,通过call()方法返回。实现Callable接口,call()结果就返回String类型。Object等其他类型同理。如果不需要返回结果,可以实现Runnable接口,重写run()方法。如果需要传递参数,可以写在构造方法中。如下:...原创 2021-05-10 12:03:00 · 135 阅读 · 0 评论 -
Redis使用Pipeline(管道)批量处理
Redis 批量处理在开发中,有时需要对Redis 进行大批量的处理。比如Redis批量查询多个Hash。如果是在for循环中逐个查询,那性能会很差。这时,可以使用 Pipeline (管道)。Pipeline (管道)Pipeline (管道) 可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline 通过减少客户端与 redis 的通信次数来实现降低往返延时时间,而且 ...原创 2023-01-29 21:04:00 · 1198 阅读 · 0 评论 -
Mybatis批量插入,批量更新
批量插入xml如下:<insert id ="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> insert into t_person(name, age, height, weight, update_date) values ...原创 2021-02-19 17:11:00 · 122 阅读 · 0 评论 -
java使用Mysql批量更新(不存在就插入,存在就更新)
在开发中,经常会遇到一种业务情景:先查询,如果不存在就插入,如果存在就更新。遇到批量更新(先查询,再插入或更新)时,有以下可选方案:第一种方案: 批量查询,再批量插入/批量更新先逐个查询,需要插入的放到一个insertList中进行批量插入,需要更新的放到另一个updateList中进行批量更新。详情见: https://www.cnblogs.com/expiator/p/14417...原创 2021-02-19 18:01:00 · 105 阅读 · 0 评论 -
java代码优化
基础1.善用条件表达式,来表示一般的if,else。if(a>0) b=1;else b=-1; 可以直接写成 b=(a>0?1:-1);判断常量,变量,字符串,表达式时,也可以用switch()代替if,else。2.用foreach代替传统的for循环。3.能够封装的操作,尽量封装起来,减少冗余。4.类名用名词命名,方法名用动词或者动词短语命名,返回boo...原创 2016-11-18 15:07:00 · 26 阅读 · 0 评论