- 博客(21)
- 收藏
- 关注
原创 Redis实现分布式锁源码分析
单机环境并发时,使用synchronized或lock接口可以保证线程安全,但它们是jvm层面的锁,分布式环境并发时,100个并发的线程可能来自10个服务节点,那就是跨jvm了。
2024-03-12 23:04:02
742
原创 Redis持久化,主从与哨兵
Copy-On-write,在生成快照的同时,可以正常处理写命令。主线程fork生成bgsave子进程,可以共享主线程的所有内存数据。bgsave子进程将主线程的内存数据写入RDB的同时,如果主线程在修改数据,这个数据会被复制一份,由bgsave子进程把该副本写入RDB文件,主线程依然可以直接修改原来的数据。
2024-03-07 00:16:13
680
原创 Mysql之InnoDB引擎
Mysql5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。
2024-03-01 23:56:09
700
原创 Mysql数据库扩容与数据迁移
停止服务之后, 能够保证迁移工作的正常进行。但是服务停止,伤害用户体验, 而且造成了时间压力, 必须在指定的时间内完成迁移,且不能出错,每一步都要有回滚预案。
2024-02-29 16:50:08
1418
原创 ShardingSphere分库分表及扩缩容策略
结合范围分片和取模分片的优点,订单系统先按范围分片,10月业务量小,分两个节点node1和node2,节点数表示对数据拆分的粒度,orderId%10,得到最终存放的节点位置node1或node2。node1和node2不仅存了10月的数据,还存了11月的数据,那它们的数据会比node3更多,node3只存了11月数据的1/3,可以给node3的权重分多一点。可以保证唯一性,但它是字符串,且不能保证单调递增,那么维护主键索引的成本就变大了,插入数据后,会产生页分裂。,会出现ID重复,且容易暴漏系统业务量。
2024-02-28 22:11:52
1484
原创 分布式之两阶段提交与三阶段提交
但参与者如果超时未收到协调者commit指令,则不能擅自回滚,它可以转而咨询其他参与者。最坏的情况是,所有参与者都处于就绪状态,这样将陷入长时间的阻塞状态。两阶段提交中,参与者没有超时机制,仅协调者有。三阶段中,协调者和参与者都有超时机制,可以避免协调者单点故障后,所有参与者阻塞的问题。2. 同步阻塞:所有事务参与者在等待其它参与者响应的时候都处于同步阻塞状态,无法进行其它操作。还有预备性提交,备份协调者,及消息队列,也可以解决通信故障问题。:根据投票结果,决定提交或回滚,并将结果发送给所有参与者。
2024-02-25 20:07:51
343
原创 Spring启动流程源码分析
一般来说,Spring启动,就是构造ApplicationContext对象以及调用refresh()方法的过程。类的继承关系图。
2024-01-16 17:17:32
1020
原创 Spring之@Lookup注解
在bean实例化的过程中,执行推断构造方法时,会找到类方法上的@Lookup信息,并存到合并后的的属性中。推断构造方法得到具体的构造方法后,进入真正的实例化流程,根据获取的实例化策略,实例化时,先执行它父类方法判断methodOverrides有值的情况下,调用方法,生成Cglib代理对象调用方法,生成执行,从beanDefinition拿到methodOverrides集合属性,拿到beanName从beanFactory即spring容器获取bean并返回。
2024-01-15 16:16:49
467
原创 Spring循环依赖与三级缓存
/ A依赖了Bclass A{public B b;// B依赖了Aclass B{public A a;ABean创建–>依赖了B属性–>触发BBean创建—>B依赖了A属性—>需要ABean(但ABean还在创建过程中)从而导致ABean创建不出来,BBean也创建不出来。
2024-01-09 00:08:50
888
原创 Spring启动时扫描流程
将beanDefinition注册到Spring容器中的属性beanFactory的 beanDefinitionMap集合中。它包含了synchronized同步块,所以注册beanDefinition是线程安全的。,判断beanDefinition是否符合要求,是则添加到beanDefinition的集合中。方法,遍历上一步拿到的beanDefinition集合,为beanDefinition设置属性。检查正在注册的beanDefinition是否已存在,存在则覆盖,有冲突则跳过不再注册。
2024-01-02 15:40:55
529
原创 Spring的依赖注入
执行完这一系列操作后,只是把注入点缓存起来了,真正的注入是AutowiredAnnotationBeanPostProcessor.postProcessProperties()中调用的inject()方法通过反射进行的属性和方法的注入。通过autowireMode自动注入模式进行注入,它会把bean里所有的set方法都当做注入点,控制粒度不够细,使用@Autowired注解可以精确控制需要自动注入的字段或属性或构造方法。它可以通过beanDefinition指定,也可以通过xml指定,或者通过注解指定。
2023-12-29 17:23:22
436
原创 Spring整合mybatis源码流程
MapperFactoryBean的AutowireMode为byType,所以Spring会自动调用set方法,有两个set方法,一个setSqlSessionFactory,一个setSqlSessionTemplate,而这两个方法执行的前提是根据方法参数类型能找到对应的bean,所以Spring容器中要存在SqlSessionFactory类型的bean或者SqlSessionTemplate类型的bean。通过studentMmapper从容器中获取的是mybatis代理类的bean。
2023-12-26 17:12:18
903
原创 JVM常量池/运行时常量池/字符串常量池理解
常量池在.class文件的字节码中,在磁盘上运行时常量池在JVM的方法区中,.class文件被加载进JVM后,复制常量池到运行时常量池,并将符号引用替换为直接引用;JVM为每一个加载的类和接口创建并维护一个运行时常量池,通过索引访问字符串常量池存在于JVM堆中。
2023-11-20 14:53:29
45
原创 SaaS多租户与数据隔离
SaaS(Soft as a Service)软件即服务,是一种软件架构技术。在同一个服务器下运行单个应用实例,为多个租户提供服务,并实现租户间的数据隔离。
2023-11-03 16:20:59
261
原创 并发编程之JMM与并发三大特性
如果重排序让步骤3先于步骤2执行,对于当前Thread-1来说没问题,但是对于后面来的Thread-2,进行第一次检查时发现instance!PC先取指令,然后从寄存器中找x的值,不存在则去cache中获取,cache中也不存在则去内存中获取。从内存将x=3加载到缓存,再加载到寄存器,再去PC取指令add,然后去ALU计算。如果将cpu存取一个指令作为一个时钟周期,比如指令x=3,执行一个load指令, 从内存中加载到寄存器需要167个时钟周期,而从L1缓存加载只需要等待4个时钟周期。
2023-09-11 16:25:12
40
原创 安装Docker 及tomcat redis mysql
Docker安装tomcat redis mysql安装Docker 及tomcat redis mysql安装Linux环境 VirtualBox CentOS7 Xshell 更新yum源安装DockerDocker安装mysqlDocker安装redisDocker安装tomcatDocker常用命令安装Docker 及tomcat redis mysql刚学习docker的使用,记录下...
2020-04-18 15:48:14
295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人