- 博客(47)
- 收藏
- 关注

原创 学习小记-一些Redis小知识
Lua脚本可以保证原子性,因为Redis会将Lua脚本封装成一个单独的事务,而这个单独的事务会在Redis客户端运行时,由Redis服务器自行处理并完成整个事务,如果在这个进程中有其他客户端请求的时候,Redis将会把它暂存起来,等到 Lua 脚本处理完毕后,才会再把被暂存的请求恢复。Redis 的事务机制是一种将多个命令打包执行的能力,确保这些命令要么全部执行,要么全部不执行,从而保持操作的原子性。Redis的事务在执行过程中,如果有某一个命令失败了,是不影响后续命令的执行的;而并发并编程的原子性是指“
2024-07-10 20:12:39
906

原创 SpringBoot实现Read Through模式
Read Through模式通常是指一种缓存策略,其中当应用程序尝试读取数据时,缓存系统首先被检查以查看数据是否已经存在于缓存中。如果缓存中存在数据(即缓存命中),则直接从缓存中读取数据并返回给应用程序。如果缓存中不存在数据(即缓存未命中),则从底层的数据存储(如数据库)中读取数据,然后将数据加载到缓存中,最后再返回给应用程序。提高性能:通过减少对底层存储的直接访问次数,可以显著提高数据检索的性能。减少延迟:缓存通常位于内存中,访问速度比磁盘存储快得多,因此可以减少数据检索的延迟。减轻数据库负载。
2024-07-07 14:40:29
819
1

原创 学习小记-- Mysql事物锁监控
可以清晰地看到当前锁的信息。trx_id 为730PER 的事务向表 parent 加了一个又的行锁,trx_id 为7311F4 的事务向表parent 申请了一个S的行锁。这也可以解释INNODB TRX 申为什么一个事务的trx state 是“RUNNING”,另一个是“LOCK WAIT”了。在INFORMATION_SCHEMA在有三张表:INNODB_TRX、INNODB_LOCKS、INNODB_LOCKS_WAITS,通过这三张表,用户可以简单地监控当前事物并分析可能存在的锁问题。
2024-03-31 16:24:46
704

原创 工作小记 -- sql中使用函数会导致预编译失效吗?
前几天有个模糊查询的需求,我还是像往常一样写,xml例子如下:<if test="keyword != null"> and t1.customer_name like concat("%"#{keyword}"%")</if>新来的组长review我写的代码时候,反手提问了我几个问题:这样写有没有什么问题? sql的执行过程是什么? 啥是预编译? 勇敢<bind>标签吗?反手给我打了个措手不及,因为原来自己一直是上面这样写的。后来查资料才
2021-08-01 18:01:38
629

原创 学习小记 -- Mysql中的锁(间隙锁、Next-Key Lock)
InnoDB存储引擎有3种行锁算法:Record Lock:单个行记录上的锁。 Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。 Next-Key Lock:Gap Lock+Record Lock,锁定一个返回,并且锁定记录本身。如果InnoDB在表建立的时候没有设置任何一个索引,那么这是InnoDB存储引擎会使用隐式的主键来进行锁定。在Next-Key Lock算法下,InnoDB对于行的查询都是采用这种算法,例如一个索引有3,10,15,26四个值,那么该索引可能被Next-K
2021-06-24 19:30:41
498

原创 学习小记 -- 并发之Java中的锁(AQS)
Lock接口和Sychronized在谈AQS之前先来谈谈我们常见的Lock 和 Sychronized。在Java SE1.5以前,Java程序是靠Sychronized关键字实现锁功能的,1.5之后在并发包中新增了Lock接口等,那两者的区别是什么?Lock接口在功能上和Sychronized一样,只是在使用时显示地获取和释放锁,缺少隐式释放锁的便捷性。但是拥有了锁获取和释放的可操作性,可中断的获取锁以及超时获取锁,这些是Sychronized不具备的。在使用Lock的时候,要在fnally块中
2021-05-25 21:37:19
235
原创 Redis-zset有序集合详解!
zset就是一个有序集合,与set相同的点是1.都是集合 2.都不可重复。不同点是zset可以做到对元素排序,就这么简单。(排序是通过score实现的,每个value都会关联一个score值)
2024-08-29 15:29:13
421
原创 Hadoop-YARN
YARN是Hadoop的资源管理和作业调度系统,它将集群资源管理和作业调度/监控功能从Hadoop MapReduce的实现中分离出来,使得Hadoop可以支持除了MapReduce之外的其他数据处理模型。用户可以将各种服务框架部署在 YARN 上,由 YARN 进行统一地管理和资源分配。
2024-07-27 16:21:33
506
原创 Hadoop-MapReduce
Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序。编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据集。
2024-07-27 14:38:28
286
原创 Hadoop-HDFS
Hadoop的HDFS(Hadoop Distributed File System)是一个分布式文件系统,它被设计用来在普通的硬件上运行,并且提供高吞吐量访问应用程序数据的能力。
2024-07-22 09:46:18
404
原创 学习小记-Kafka相较于其他MQ有啥优势?
每个主题可以有多个分区,分区分布在不同的 Broker 上,用于存储主题的消息,这使 Kafka 可以在多台机器上处理、存储消息,提供了并行的消息处理能力和横向扩容能力。Kafka 的事务消息支持经过多次优化,现在已经相当成熟,主要特点是精确一次语义(Exactly Once Semantics),这意味着在生产和消费过程中,每条消息都只会被处理一次,从而避免了重复消费和消息丢失的问题。Kafka 支持消息的压缩存储,能够有效地减少存储成本和网络带宽使用,特别是在处理大量日志数据时,这一特性尤为有用。
2024-07-17 20:14:09
617
原创 学习小记-RocketMQ的一些小知识
Rocket5.0版本之前,使用Timer定时器实现,先将消息存储在内存中,达到时间后再存储到磁盘中并且投递给消费者(Timer有缺陷,定时器中任务很多时会导致性能下降)。顺序消费因为加了很多锁,会降低吞吐量,所以慎重选择。
2024-07-14 20:23:45
374
原创 Zookeeper-数据结构
在创建时,ZooKeeper 会在节点名的后面附加一个由父节点维护的序列号,确保全局唯一。:当创建顺序节点时,ZooKeeper 会在节点名称后附加一个数字,该数字从 0 开始,每次创建新节点时递增。:节点可以是持久的,这意味着即使 ZooKeeper 服务重启,持久节点依然存在。如果节点是短暂的,那么当创建它的客户端会话结束时,节点会被自动删除。: 内部节点是 ZooKeeper 中的父节点,可以包含子节点。: 容器节点是一种特殊的 ZNode,它不存储数据,但可以包含子节点。
2024-07-11 20:00:40
591
原创 学习小记-Netty
Netty是由JBOSS个java开源框架,Netty提供异步的、事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
2024-07-06 18:17:00
295
原创 Mysql中undolog、redolog、binlog的写入顺序是怎么样的?
举个例子,当我们要更新一条数据的时候,先在undo log中记录一下这条数据的旧值,以便于发生错误时能将数据恢复。然后修改这条数据的内容,最后在redo log中记录这条数据改变后的新值,以便于数据库崩溃后能从redo log中恢复数据。所以说,undo log是先写的,redo log是后写的。另外,未提交事务产生的redo日志,如果由于某种原因这个事务回滚,对应的redo不会被清楚但也不会被应用,同样保证了数据的一致性。undo log是用于事务回滚,当一个事务开始时,就需要记录undo log。
2024-06-09 11:54:30
2088
1
原创 MAVEN依赖管理
optional参数值为true,则表示此依赖对外隐藏,不会被路径依赖引用。exclusions关键字,排除不写版本,排除会排出所有。指明maven在打包项目时的生命周期和范围。定义该工程用于构建管理。
2024-03-10 18:44:56
387
1
原创 学习小记 -- Spring之三级缓存解决循环依赖
Bean的创建过程在AbstractApplicationContext#refresh() ->finishBeanFactoryInitialization ->beanFactory.preInstantiateSingletons()的时候开始:执行流程从上到下三个Map分别对应我们说的一级缓存,二级缓存,三级缓存。注意,每个Map里的参数类型不同,我们发现二级缓存里value是一个ObjectFactory<?>类型,点进去可以看到:使用了...
2021-09-14 00:47:51
239
原创 学习小记 -- SpringBean的创建过程
AbstractApplicationContext#refresh方法中:创建BeanFactory。 加载配置文件过去BeanDefication定义信息。 为BeanFactory初始化操作。 执行BeanFactoryPostProcessor. 注册BeanPostProcessor,初始化事件多播器,注册监听器。 实例化结束。 Bean填充属性。 执行Aware方法(为了获取容器中的一系列属性值)。 执行BeanPostProcessor befor init a.
2021-09-11 17:24:44
177
原创 学习小记 -- MVCC之版本链和ReadView
版本链在InnoDB中,一张表必须包含两个字段,trx_id和roll_pointer。trx_id : 事务字段,当一个事务去操作某个行的数据时,会将自己的事务Id赋值给trx_id字段 roll_pointer : 回滚指针,当一个事务更新了一个字段的时候,并不会直接删除掉之前的字段,而是将该指针指向之前的字段存储到undo blogReadViewMVCC是由版本链和ReadView控制的,我们可以将Read View看作一个数组,整个数组的左边界和右边界时当前活跃事务的事
2021-08-29 18:19:49
638
原创 学习小记 -- Redis的RedLock算法
RedLock算法是Redis集群中用的分布式锁算法,在讲之前先简单回顾一下在单Redis节点中分布式锁的使用原理:我们都知到,用Redis可以实现分布式锁,在单Redis节点中,分布式锁通常使用SET lock_key NX PX 5000NX代表只在键不存在时,才对键进行设置操作。 PX 5000设置键的过期时间为5000毫秒。但是会有问题,如果Client向Master获取锁之后同步给Slave,如果Client获取锁成功之后Master节点挂掉,并且未将该锁同步到Slave,..
2021-08-29 16:16:47
819
1
原创 学习小记 -- HTTP
引入窗口概念的原因我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。如果你说完一句话,我在处理其他事情,没有及时回复你,那你不是要干等着我做完其他事情后,我回复你,你才能说下一句话,很显然这不现实。按数据包进行确认应答所以,这样的传输方式有一个缺点:数据包的往返时间越长,通信的效率就越低。为解决这个问题,TCP 引入了窗口这个概念。即使在往返时.
2021-08-11 18:48:23
126
原创 学习小记 -- TCP 流量控制、拥塞控制
学习了小林大佬的TCP,来画个思维导图吧,详细点击链接参考咯:https://mp.weixin.qq.com/s/Tc09ovdNacOtnMOMeRc_uA
2021-08-08 19:52:10
91
原创 学习小记 -- TCP和UDP
最近重温了计算机网络的知识,趁着还热乎,赶紧????一下。本节先介绍一下传输层吧,毕竟传输层是重中之重!目录知识体系框架传输层功能UDPUDP优点UDP数据报组成UDP校验TCPTCP报文段TCP连接管理总结TCP和UDP的区别知识体系框架传输层功能提供应用进程间的逻辑通信(网路层提供主机之间的逻辑通信)。 差错校验:对收到报文的首部和数据部分进行差错校验。 提供无连接或面向连接的服务。 面向连接的TCP。 连接管理。 流量
2021-08-08 17:05:53
192
原创 学习小记 -- 说说对Redis集群的了解
目录集群数据结构槽指派节点数据库的实现复制与故障转移总结:上篇小小总结了下Redis的Sentinel模式,这篇就肝一下集群吧。Redis集群是Redis提供的分布式数据库解决方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。集群数据结构一个Redis通常由多个节点(Node)组成,一个节点就是一个运行在集群模式下的Redis服务器。节点之间可以通过cluster meet命令来进行连接,通信方式类似于三次握手,节点1向可以发送如下命令.
2021-08-01 16:02:18
190
原创 学习小记 -- Redis的哨兵(Sentinel)你了解吗?
目录启动并初始化Sentinel获取主服务信息获取从服务器信息向主从服务器建立订阅连接接收来自主从服务器的频道信息更新Sentinels字典Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视人意多个主服务器,以及这些主服务器下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器代替已下线的主服务器继续处理命令请求。启动并初始化SentinelSentinel本质上就是一个运.
2021-07-26 23:36:50
722
1
原创 学习小记 -- Redis持久化(RDB/AOF)
今天小小的盘了一下Redis的持久化机制,赶紧记下来,要么过两天就忘了哈哈哈!!~~目录RDBAOFAOF重写AOF后台缓冲Redis 4.0混合持久化Redis提供了两种持久化机制,一种是RDB快照,是全量的备份;另一种是AOF日志,记录的是连续的增量备份。RDBRDB持久化机制可以内存中的数据库状态保存在磁盘中,避免数据意外丢失。Redis有两个命令用于生成RDB文件,一个是SAVE,一个是BGSAVE。SAVE命令会阻塞Redis服务器进程,知道RDB文件.
2021-07-18 15:07:31
367
原创 学习小记 -- 你了解Redis中的字典吗?
字典是Redis服务器中出现最为频繁的复合型数据结构,除了hash结构的数据会用到字典(dict)外,整个redis数据库的所有key和value也组成了一个全局字典,还有带过期时间的key集合也是一个字典。zset集合中存储value和score值的映射关系也是通过字典结构实现的。一个字典内部包含两个hashtable,hashtable属性是一个数组(其结构可以理解成Java里面的hashMap),这个数组中有两个元素,分别指向一个dictEntry结构,这个dictEntry可以理解为是一个数组,
2021-07-13 21:06:50
182
原创 学习小记 -- Redis基础之链表、整数集合
链表链表在Redis中的应用非常广泛,比如列表健的底层实现之一就是链表。当一个list健包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表健的底层实现。除了链表健之外,发布于订阅,慢查询,监视器等功能也用到了链表。每个链表节点使用一个listNode结构来表示:typedef struct listNode{ //前置节点 struct listNode *prev; //后直节点 struct
2021-07-11 19:47:04
147
原创 学习小记 -- Redis基础之SDS!
之前对Redis只是会简单的使用,对其原理也是一知半解,这显然是不行的,想要翻身,还得学。所以最近豪掷千金购得两本业内大佬写的的Redis书,希望能让自己对Redis有更新的认识!读书笔记记起来!目录简单动态字符串SDS与C字符串的区别常数复杂的获取字符串长度杜绝缓冲区溢出二进制安全C字符串和SDS对比简单动态字符串我们都知道Redis有string类型的数据结构,平时估计也是用这个最多吧,但是有没有想过这个String字符串跟C语言的字符串又啥区别呢?Redis
2021-07-11 18:01:29
229
原创 学习小记 -- Mysql事务日志(undo log)
这篇来小小的浅析一下undo log????~~概念redo log 记录了事务的行为,可以很好的对页进行“重做”操作,但是事务有时候还需要进行回滚操作,这时候就需要undo。与reod log不同,undo log存放在数据库内部的一个特殊段(segment)中,这个段就称为undo段。undo段位于共享表空间中。undo log主要存储的也是逻辑日志,比如我们要insert一条数据了,那undo log会记录的一条对应的delete日志。我们要update一条记录时,它会记录一条对应相反的u
2021-07-04 20:52:24
382
原创 学习小记 -- Mysql事务日志(redo log)
最近又把事务仔细盘了一遍,防止忘记,赶紧记下来,嘿嘿????????????~我们都知到,InnoDB中的事务符合ACID的特性:原子性(atimicity) 一致性(consistency) 隔离性(ioslation) 持久性(durability)这里就不详细展开描述概念了,事务的隔离性由之前写到的mysql中的锁来控制。原子性、一致性、持久性通过数据库的redo log和undo log来完成。redo log称为重做日志,用来保证事务的原子性和持久性。undo log用来保证事务的
2021-07-04 20:12:38
404
原创 学习小记 -- Mysql之死锁
通过死锁是指两个或两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象。这里其实大家都可以想到一个解决方式,就是超时回滚:将任何的等待都转化为回滚,并且事务重新开始。的确这是一个解决办法,但是在生产环境中,这可能导致性能的下降,所带来的问题可能比死锁问题更严重,而且很难被发现并且浪费资源。InnoDB存储引擎中,参数innodb_lock_wait_timeout用来设置超时时间。若其仅通过超时后对事务进行回滚或者通过FIFIO的顺序选择回滚对象,若超时的事务所占的权重比较大,比如事务操
2021-06-27 16:28:09
167
原创 学习小记 -- Mysql中的锁
锁是数据库区别与文件系统的一个关键特性。数据库使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。对于MyISAM引擎,其锁是表锁设计。InnoDB存储引擎锁的实现和Oracle数据库非常类似,提供一致性的非锁定读、行级锁支持。行级锁没有相关额外的开销,并可以同时得到并发性和一致性。lock和latchlock和latch是两个比较容易混淆的概念,在数据库中两者都可以称为“锁”,但两者的含义截然不同。latch一般被称为闩锁(轻量级锁),因为其要求锁定的时间必须非常短,
2021-06-23 23:17:48
187
原创 学习小记 -- 线程池的工作原理
ThreadPoolExecutor执行execute()方法的示意图如下:如果当前运行线程小于corePoolSize,则创建新线程来执行任务(执行这一步骤需要获取全局锁)。 如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue。 如果无法将任务加入BlockingQueue(队列已满),则创建新的线程来处理任务(执行这一步骤需要获取全局锁)。 如果创建新线程将使当前运行的线程超出maximumPoolSize,任务将被拒绝,并调用RejectExecut
2021-06-21 21:25:54
241
原创 学习小记 -- JVM堆一定是线程共享的吗?
今天的第三份学习笔记~~~~翻身做主人真不容易啊!我们都知道,在Java内存模型中,堆是运行时数据区的一部分,里面存放所有的对象实例以及数组都要在堆上分配,是线程共享的,今天看到da la...
2021-06-14 18:46:19
356
原创 学习小记 -- JVM垃圾回收算法&垃圾回收器
开始学习!!!!上篇介绍了基本的垃圾回收机制,本篇来记录一下垃圾回收算法和市面上的常用的垃圾回收器。以下只是学习笔记,不具备专业性,慎重参考!(来自小菜鸟的卑微)
2021-06-14 17:14:02
224
原创 学习小记 -- JVM垃圾回收浅析
JVM内存分配说到JVM垃圾回收,我还是得提一下JVM内存分配,虽然相信大家对这部分已经很懂了,但是我不懂呀,我讲讲你们看看有什么错的地方还请帮我指正(嘿嘿????)!
2021-06-14 13:56:15
238
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人