- 博客(24)
- 收藏
- 关注
原创 ReentrantLock与AQS
获取锁 lock() lockInterruptibly() tryLock() tryLock(long time, TimeUnit unit)await(long time, TimeUnit unit);调用Condition的await()和signal()方法,都必须在lock保护之内。等待/通知机制 和 多条件协调(与他相反的是Object仅有一个内置的等待机制)非公平锁在lock的时候,会先进行一次cas,失败了再入队。,更加灵活的wait()和notify()机制,
2025-07-22 17:47:59
231
原创 JVM对象创建与内存分配机制
对象创建过程:一:是否加载虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。new指令对应到语言层面上讲是,new关键词、对象克隆、对象序列化等二:分配内存如何分配?如果内存是规整了,所有用过的内存在一边,空闲的在另一边,中间放着一个指针作为分界点指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离。
2025-07-21 17:49:22
1042
原创 RocketMQ 高可用集群架构与一致性机制解析
4.当大多数共同保存了Entry,就可以执行指令,保存到State Machine里,此时Entry状态为commit;log中的指针,一个是commit节点,一个是Leader往follower里发送后数据的指针。数据丢失情况:因为要保证只能有一个主节点,因此,脑裂期间,小Term里的数据会丢失。log日志保存在server上的操作日志,每个命令成为Entry,主要是。保证Entry的顺序一致,而不是Entry不会丢失(最终一致性),4.快速响应:不能因为一致性,导致响应以集群中最慢的为准。
2025-07-17 22:59:48
1017
原创 SpringBoot集成RocketMQ的两种方式
配置复杂,需要手动配置product、consumer、监听器、序列化、消息过滤、事物消息;非常灵活,所有RocketMQ底层能力都能用上。使用建议: 对 RocketMQ 特性依赖较深(如事务消息、消息延迟等级、过滤等)。项目中对性能和精细化控制要求高。
2025-07-15 17:25:47
702
原创 Mac M芯片安装RocketMQ服务 以及MQ集群、Dledger集群
阿里开源的基于MVC架构,JAVA语言开发的,异步的消息序列;消息流转模型;MQ:MessageQueue消息队列,消息是在不同进程之间传递的数据,可以是一台机器也可以分布在不同机器。队列是具有FIFO特性的结构,用来缓存数据的。MQ的主要作用:异步;解耦;削峰。
2025-07-12 11:19:25
1183
原创 Redisson Lock源码分析
1.如果搞了 主-从:的方式用红锁 , 但是本身还是存在那种套娃的问题(A返回,B返回但是B挂了B的从此时没有,C有获得另一个线程的锁,这样有出现了刚才的问题)读写锁怎么实现的: 用lua脚本写的hset结构,读的绑定的mode是read,写的是write,通过可冲入的方式,保证了读读可以执行,每次读都+1。8:串行转并发,对于redis无的,读缓存再放入redis里,操作,可以加tryLock,等待时间为一次完整执行的时间。对于Redisson的优化,对于读多写少的场景可以使用读写锁;
2025-07-09 14:10:05
803
原创 Redis线程模型
Redis的事务和Pipelinie机制,对于Redis的指令原子性问题,都有一定的帮助,但是,从之前的分析可以看到,这两个机制对于指令原子性问题都有水土不服的地方。2.也有可能出现不一致的情况,redis在执行事物的时候,会先记录AOF文件里,在去执行如果此时,redis一场关闭了,就会出现AOF有,但是数据对不上的问题,启动就会失败,这个时候就需要用 redis-check-aof工具修复AOF文件,移除这些没完整执行的文件,就可以了。对于核心的读写键值的操作,Redis是单线程处理的。
2025-07-07 16:58:54
913
原创 Redis的数据类型与数据结构
1)一个list的容量是2的23次方-1个元素,大约40多亿,在应用中要注意大Key的问题。SETNX product:1001 true // 1代表锁成功,2代表锁失败。场景:大数据情况下集合中的不重复元素个数,网站的UV、WAU、DAU、MAU统计。场景:有序队列,排行榜当日排行,七日搜索排行榜单计算,展示七日排行榜前十。场景:MQ生产者消费者模式,有更好的专门做MQ的替代品。场景:地图,根据坐标计算距离,搜索多少公里的周边的东西。1)过期只能设置在key上,不能在field上设置。
2025-07-06 16:16:51
662
原创 Redis数据安全与性能优化
数据是单向的,只能从主->从,默认情况下每个redis都是主节点,一个主可以有多个从,一个从只能从一个主上同步数据。复制延迟,信号衰弱:所有的写和同步的工作都在master上,同步具有延迟性,当系统繁忙的时候好,延迟问题更加严重,随着slave机器的增加,这个问题更加严重;Redis哨兵是独立部署在哨兵节点上,运行特定的哨兵进程来实现的,这些哨兵时刻监视着主从节点状态,当主节点故障时,自动完成故障转移,并通知应用方,实现高可用。选举一个新的主节点,并将其他从节点切换到主节点,这样保证了高可用。
2025-07-05 06:37:39
925
原创 Mysql主从复制原理
MySQL 主库在收到客户端提交事务的请求之后,会先写入 Binlog,然后再提交事务,更新存储引擎中的数据,事务提交完成后,给客户端返回操作成功的响应。无论什么样的系统,什么样的存储结构,都可以给他想成一个状态机,存储系统的数据也成为状态(状态就是mysql中的数据),状态的全量备份也成为快照,我们按照记录更新存储系统的每一个操作执行,就是操作日志(Commit Log 也就是binlog)保证了顺序的一致性。基于GTID的复制是完全基于事物的 ,所以很容易确定从源数据的一致性,
2025-07-04 12:58:04
1029
原创 MYSQL8.0新特性
此参数用来设置innodb线程的并发数,默认值为0表示不被限制,若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍,如果超过配置并发数,则需要排队,这个值不宜太大,不然可能会导致线程之间锁争用严重,影响性能。show VARIABLES like '%sort_buffer_size%' //排序buffer大小。-- N 每 N 个事务提交才刷一次 binlog,性能提升,但可能丢最多 N 个事务的数据。-- 1 每次事务提交时 立即将 binlog 刷盘,最安全,强一致性,但性能略低。
2025-07-02 18:35:14
529
原创 JVM内存模型
只要写出满足jvm规范的class文件,就可以在jvm里运行,通过jvm屏幕上上层开发语言差异和下层操作系统硬件的区别,一次编写到处运行;运行.class文件的时候好jdk必须大于等于编译时候的jdk版本spirng6 和spring3.x的class文件是通过jdk1.7编译的,版本号是61,因此运行此版本必须使用jdk17以上的版本。
2025-07-02 13:52:10
1100
原创 MYSQL中的锁和MVCC机制
在RR隔离界级别下,为了防止出现不可重复读和幻读情况,在遍历聚集索引的时候,为了防止其他事物操作数据(不可重复读)和间隙被插入问题(幻读),导致数据不一致,因此会在所有扫描到的索引记录和间隙加上锁。这个read view是有,当前未提交的事物trx_id数组(数组里id最小的为min_id),和已创建的最大的事物trx_id(trx_id>Y,说明在事物之后提交的,不可读(如果为自己当前事物的可读)。共享锁和共享锁之间不阻塞,共享锁和排他锁之间阻塞,排他锁和排他锁之间阻塞。未提交区间[*,*];
2025-07-01 03:45:59
1197
原创 Count(*)(1)(field字段)(主见id)区别&&表关联涉及到的算法&InnoDB引擎图
这四个的执行计划一样;效率上来说:字段均有索引:count(*)几乎=count(1)>count(字段)>count(主键id)count(字段)会走二级索引,体量比主键的小,所以字段的比索引快字段无索引:count(*)几乎=count(1)>count(主键id)>count(字段)无索引不走索引肯定count(主键id)>count(字段)count(1)不会取数据,统计到就会按1来统计,count(字段)还会取出数据,所以count(1)肯定大于count(字段)的;
2025-06-29 23:02:18
398
原创 Explain分析执行计划优化索引
常见的有4种:simple(简单查询),subquery(子查询),primary(复杂查询的最外层),derived(form后)下图为官方文档里的描述。
2025-06-28 17:56:55
659
1
原创 Mysql架构
在mysql的innodb引擎中,采用AWL技术,先写入redo log buffer里,再更新到磁盘里,更新策略由innodb_flush_log_at_trx_commit控制,实现 异步/同步/批量 保证性能和安全,持久化到磁盘;大小固定,循环日志+双指针写入redo log(writ_pos写指针,flush_pos刷盘指针):若文件慢了,会1.阻塞写入;3.长连接:执行完成后,会等待一段时间,如果有请求,继续使用同一个链接,注意:如果长连接切多,且每个链接占用的资源多,会出现OOM的情况,
2025-06-27 23:18:29
538
原创 SpringBoot整合SSL
/ 当http重定向到https时的https端口号。输入: nslookup -q=TXT _dnsauth.你的域名 ns1.huaweicloud-dns.com。// 默认协议为org.apache.coyote.http11.Http11NioProtocol。port: https端口(配置成功后,用域名也可以访问进来)对比回显的tex值,如果相同,校验通过,就可以申请下载SSL了.注: 申请过程中需要有自己的域名, 如果没有,需要去申请;//配置HTTPS 同时支持HTTP时松开注释。
2023-07-01 22:11:54
332
原创 HTTP请求
HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。GET和POST能做的事情是一样一样的。
2023-04-11 14:05:52
149
原创 idea的maven插件有问题, 尝试在maven的依赖->右键->download source, 也不报错, 但始终没有反应,
1) 点击idea的terminal, 并进入你项目的目录。3) 如果只想单独下载某个依赖,
2023-04-08 22:32:43
678
1
原创 SpringBoot中Maven问题
3. 删掉maven-wrapper.properties文件 问题解决。1. 找到项目的 .mvn文件夹。2. 进入wrapper。
2023-04-07 14:24:06
906
1
原创 前端Cannot read properties of null (reading ‘pickAlgorithm‘)问题
国内网络环境对npm版本管理器支持极差,也不排除是npm版本管理器项目部署功能本身就很烂。
2023-03-21 11:27:22
421
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅