java架构
文章平均质量分 71
森火123
闲散的码农耕耘者
展开
-
SpringBoot AOP + Redis 延时双删功能实战
如果我们没有第二次删除操作,此时有请求访问数据,有可能是访问的之前未做修改的Redis数据,删除操作执行后,Redis为空,有请求进来时,便会去访问数据库,此时数据库中的数据已是更新后的数据,保证了数据的一致性。注意:要知道经常修改的数据表不适合使用Redis,因为双删策略执行的结果是把Redis中保存的那条数据删除了,以后的查询就都会去查询数据库。在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。原创 2023-10-23 20:01:47 · 528 阅读 · 1 评论 -
性能爆表:SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据实测!
通过以上测试案列,同样是导入2000003 条数据,多线程耗时1.67分钟,单线程耗时5.75分钟。通过对不同线程数的测试,发现不是线程数越多越好,具体多少合适,网上有一个不成文的算法:CPU核心数量*2 +2 个线程。附:测试电脑配置。转载 2022-11-07 15:47:35 · 226 阅读 · 0 评论 -
这样优化Spring Boot,启动速度快到飞起!
微服务用到一时爽,没用好就呵呵啦,特别是对于服务拆分没有把控好业务边界、拆分粒度过大等问题,某些 Spring Boot 启动速度太慢了,可能你也会有这种体验,这里将探索一下关于 Spring Boot 启动速度优化的一些方方面面。转载 2022-11-04 11:19:05 · 326 阅读 · 0 评论 -
高并发常识:TPS、QPS等
分布式、微服务、Service Mesh目前都是大家耳熟能详的词语了,现在随便一个互联网公司说出来大家都是在搞微服务。但我们搞来搞去,怎么样来衡量一个应用当前的状态到底是怎么样的?到底需不需要扩容?是需要横向扩容还是进行项目重构?这时候我们就需要一堆监控指标来协助我们进行分析当前的应用状态,以便在某些事故发生前进行资源上的调配或优化。下面咱们就来说道说道这几个重要的指标,一定要记牢,不管面试还是自己用都是必须滴。要牢记一点,所有的指标都是根据时间单位来算的,比如每秒XX、每分钟XX,要记住这个大前提,下面咱原创 2022-07-12 17:34:52 · 1063 阅读 · 0 评论 -
JavaEE应用的可扩展性伸缩性
本文讨论了JavaEE应用分布式扩展性的基础知识,scalability扩展性这个概念不是很容易理解,可能会被误解为高可用性High Availability(简称HA),有人建议使用集群clustering作为扩展性和HA的解决方案,这种说法其实没有错,关键是我们需要搞明白为什么是这样。 扩展性并不是Java EE平台规范的标准组件,其实现技术和服务器供应商有关,实现一个JavaEE应用的可扩展性因此有点小困难,因为没有厂商资料或规范文档来指导。 扩展性分纵向扩展Scale up和Scale Out水原创 2022-07-12 16:21:31 · 155 阅读 · 0 评论 -
java 性能优化:35 个小细节,让你提升 java 代码的运行效率
代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。代码优化的目标是减小代码的体积提高代码原创 2022-07-12 09:41:16 · 2615 阅读 · 1 评论 -
对应技术解决方案
1.负载均衡1.利用Gateway2.限流1.利用Gateway3.鉴权1.利用Gateway微服务每个模块解决啥问题?1.Gateway负载均衡路由寻址鉴权限流持续更新原创 2022-03-22 15:47:34 · 63 阅读 · 0 评论 -
QPS、TPS、PV、UV、GMV、IP、RPS的概念解释
前言关于 QPS、TPS、PV、UV、GMV、IP、RPS 这些词语,看起来好像挺专业。但实际上,我认为是这是每个程序员必懂的知识点了,你可以搞不懂它们怎么计算的,但是你最少要了解它们分别代表什么意思。通俗易懂 QPS、TPS、PV、UV、GMV、IP、RPS的概念解释扩展阅读QPSQueries Per Second,每秒查询数。每秒能够响应的查询次数。QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。每秒的原创 2022-03-22 15:13:59 · 1577 阅读 · 0 评论 -
java锁乐观锁Redis锁
乐观锁@Transactional(propagation = Propagation.REQUIRED) @Override public void decreaseItemSpecStock(String specId, int buyCounts) { // synchronized 不推荐使用,集群下无用,性能低下 // 锁数据库: 不推荐,导致数据库性能低下 // 分布式锁 zookeeper redis //原创 2022-03-18 01:17:25 · 945 阅读 · 0 评论 -
通过日志监控service执行时间
ServiceLogAspectpackage com.imooc.aspect;import org.aopalliance.intercept.Joinpoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.slf4j.Logger;import org.s原创 2022-03-18 01:18:15 · 87 阅读 · 0 评论 -
事务传播详解
TransTestpackage com.test;import com.imooc.Application;import com.imooc.service.StuService;import com.imooc.service.TestTransService;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired原创 2022-03-18 01:18:33 · 99 阅读 · 0 评论 -
MyBatis源码分析
分析完了MyBatis的架构和执行流程,终于到了源码分析的章节,估计很多小伙伴的大刀都已经饥渴难耐了,好了接下来咱么就要开始 “ Double Kill ” 了。这篇文章咱么主要根据MyBatis的执行流程,通过Debug的方式,来一步步非常详细的带着大家看下MyBatis的从加载配置文件、解析配置文件、创建四大核心对象(Executor、ParameterHandler、ResultSetHandler、StatementHandler)的详细过程,以及在这个过程中是如何的设置参数?如何执行查询?如何封原创 2022-03-18 01:19:17 · 939 阅读 · 0 评论 -
MyBatis的缓存机制
· 进阶提升:MyBatis一级缓存MyBatis做为持久层的框架,跟数据库的交互式是最多的,在互联网的这种经常面临的高并发情况下,缓存的中要性不言而喻,比如大家常见的Redis、Memcached等,同样MyBatis也提供了缓存的的机制,MyBatis`提供了两种缓存机制,一级缓存和二级缓存,接下来我们就来先来看下一级缓存的是怎么实现的一级缓存是MyBatis中的默认提供的缓存的,也就是说,我们在使用Mybatis的时候本身就在使用,他是默认开启的, 一级缓存是SqlSession级别的缓存,只有原创 2022-03-18 01:18:59 · 185 阅读 · 0 评论 -
MyBatis的执行流程分析
上一讲,咱么说了下MyBatis的架构设计,这一节咱们说下MyBatis的执行流程,说到执行流程这个事儿,80%的程序员可能都是停留在了使用的层面,可能它们都在忙着陪女朋友,也没有时间研究;也可能觉得使用起来很简单,不就是加载配置文件,执行SQL吗;但是作为一个励志成为优秀架构师的程序猿,会用还远远满足不了我们对技术的渴望。所以今天就来满足大家的渴望核心流程介绍我们都知道MyBtis是对JDBC的封装,不管怎样,JDBC的那一套还是不会变的,只是做了抽象、封装、归类等;所以我们顺着JDBC的思路来说下原创 2022-03-17 21:50:05 · 311 阅读 · 0 评论 -
MyBatis架构分析
我们都知道Mybatis是一个非常小巧灵活的ORM框架,深受国内广大开发者的喜爱,我们知道它的出现某种程度了是为了消除所有的 JDBC 代码和参数的手工设置以及结果集的封装问题;基于这个一点,我们就可以知道MyBatis实际上就是对JDBC的封装 ,所以这节我们就来看下MyBatis是怎样对JDBC封装的,从而可以借鉴学习其他优秀框架在解决问题之初从架构设计层面的思考,然后通过执行流程分析,进一步深刻理解Mybatis的工作原理Mybatis的架构设计首先我们先来了解下MyBatis的架构设计My原创 2022-03-17 21:47:28 · 465 阅读 · 0 评论 -
SpringBoot自动装配原理解析
目前微服务已是企业标配,鉴于很多小伙伴还只是停留在知其然,确不知其所以然的情况;这里给大家总结一下SpringBoot的自动装配原理, 后面有些内容老师就是基于SpringBoot这种源码的自动装配原理的来直接写代码的,如果你明白了SpringBoot的自动装配原理,对于后面学习将会更加轻车熟路。首先对于一个SpringBoot工程来说,最明显的标志的就是 @SpringBootApplication 它标记了这是一个SpringBoot工程,所以今天的SpringBoot自动装配原理也就是从它开始..原创 2022-03-17 21:46:15 · 159 阅读 · 0 评论 -
SpringBoot启动流程分析原理
· 进阶提升:SpringBoot启动流程原理解析(一)我们都知道SpringBoot自问世以来,一直有一个响亮的口号"约定优于配置",其实一种按约定编程的软件设计范式,目的在于减少软件开发人员在工作中的各种繁琐的配置,我们都知道传统的SSM框架的组合,会伴随着大量的繁琐的配置;稍有不慎,就可能各种bug,被人发现还以为我们技术很菜。而SpringBoot的出现不仅大大提高的开发人员的效率,还能避免由于"手抖"带来的配置错误。很多程序员都感慨SpringBoot的到来大大解放了生产力,但是也有聪明的程序原创 2022-03-17 21:43:57 · 174 阅读 · 0 评论 -
1.Spring、Spring Boot 和 Spring Cloud 有什么关系?
所以说没有 Spring 强大的功能和生态,就不会有后期 Spring Boot 的火热,Spring Boot 使用约定优于配置的理念,重新重构了 Spring 的使用,让 Spring 后续的发展更有生命力。Spring Boot 拥有强大融合社区开源软件的能力,在没有使用 Spring Boot 之前,我们需要按照每个开源软件的特性,将对应的组件包集成到我们的开发项目中,因为每个组件的设计理念和开发团队都不一致,因此会有很多不同的调用风格在我们的项目中。原创 2022-03-17 21:38:27 · 2055 阅读 · 1 评论 -
java程序减少内存占用
尽量重用对象,不要循环创建对象,比如:for循环字符串拼接容器类初始化的时候指定长度List<String>collection=newArrayList<String>(5);Map<String,String>map=newHashMap<String,String>(32);ArrayList随机遍历快,LinkedList添加删除快集合遍历尽量减少重复计算(或者使用jdk8Stream)for(inti=0,len=collecti...原创 2022-03-14 15:22:35 · 2490 阅读 · 0 评论 -
Lock锁
从Lock作为切入点我想以lock作为切入点来讲解AQS,毕竟同步锁是解决线程安全问题的通用手段,也是我们工作中用得比较多的方式。Lock APILock是一个接口,方法定义如下void lock() // 如果锁可用就获得锁,如果锁不可用就阻塞直到锁释放void lockInterruptibly() // 和 lock()方法相似, 但阻塞的线程可中断,抛出 java.lang.InterruptedException异常boolean tryLock() // 非阻塞获取锁;尝试获取锁,如原创 2021-11-10 17:52:48 · 143 阅读 · 0 评论 -
Ubuntu查看服务占用内存情况
1.sudo docker stats2.sudo free3.sudo top原创 2022-03-11 21:14:32 · 1673 阅读 · 0 评论