自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 【MySQL】InnoDB中的锁

InnoDB锁机制的背景是在保护事务隔离性的前提下最大化并发性,通过MVCC、行锁、表锁的协同,满足高并发场景需求。

2025-04-07 16:16:34 692

原创 【MySQL】InnoDB中的MVCC

MVCC是一种数据库并发控制技术,通过维护数据的多个历史版本实现读写操作的并行化,从而提升性能并解决事务隔离性问题。

2025-03-28 18:26:49 600

原创 【MySQL】undo日志页结构

通过undo日志能保证事务回滚,也就是原子性,上面讲过insert操作对应的undo日志可以直接删除,update和delete操作的不能,就是为了MVCC,多版本并发控制,后面再来讲解MVCC。

2025-03-21 17:59:41 1101

原创 【MySQL】undo日志类型

本文主要讲解了插入、删除、更新分别对应的undo日志结构,根据产生的这些undo日志就能进行事务回滚,具体的回滚方式后面再进行讲解。

2025-03-12 15:00:35 815

原创 【MySQL】redo日志写入磁盘的过程

redo日志是InnoDB使用崩溃恢复的核心机制,通过物理日志、顺序写入和checkpoint机制,保证事务的持久性并且提高了数据库的性能。

2025-03-10 15:26:16 976

原创 【MySQL】InnoDB中的redo日志类型

本文主要简单介绍了一下redo日志有哪几种类型,还有一些其它的类型可以在网上大概查找了解一下。

2025-03-04 14:56:37 891

原创 【MySQL】InnoDB中的Buffer Pool

Buffer Pool用作缓存,主要用于数据写入、数据读取、数据刷新,目的是为了减少磁盘I/O,增加读写速率,提高数据的访问速度和系统性能。

2025-02-27 15:42:35 748 2

原创 【MySQL】表连接原理

对驱动表进行查询时就相当于单表查询,也可以通过索引去优化查询速度,当确定了驱动表的查询结果时,其实被驱动的查询条件也就确定了,也可以通过加索引去优化查询速度,当然索引是否生效还要看和全表扫描的执行效率进行对比。

2025-02-25 15:54:27 1023 1

原创 【MySQL】InnoDB单表访问方法

mysql中优化器会将我们的查询条件进行优化,我们可以通过explain关键字来查看单表查询的访问方式。

2025-02-13 14:49:12 375

原创 【LeetCode】时间复杂度和空间复杂度

分析算法的时间复杂度和空间复杂度是衡量算法性能的关键,它们分别用于评估算法的运行时间和占用内存,本文只讲相关概念和示例。归并排序的时间复杂度是O(n log n),因为它不断将数组分为两半,递归的深度是log n,而合并过程是O(n)。递归调用中每个 fibonacci 调用会产生两个新的递归调用,因此递归树的大小是指数级的。全排列的个数是 n!冒泡排序中有两个嵌套的循环,执行次数为n^2。无论数组大小如何,执行时间是固定的。创建了一个 n x n 的二维数组。创建了一个大小为 n 的数组。

2025-02-12 14:10:13 961

原创 【MySQL】InnoDB存储页的独立表空间

本文主要讲解独立表空间的组成部分,涉及到页、区、组还有各种结构等,后续可以再讲解系统表空间的组成,和独立表空间类似。

2025-02-11 15:58:51 751

原创 【MySQL】mysql数据目录

本文大概讲了一下我们插入数据库的用户记录是存储在哪些目录哪些文件里的,注意不同版本的数据库存储的文件是有区别的,不过都大差不差,了解一下就行。

2025-01-15 11:16:19 419

原创 【MySQL】联合索引的使用

目录1、背景2、数据示例3、联合索引B+树结构4、联合索引的几种使用方式【1】全值匹配【2】部分列匹配【3】列前缀匹配【4】范围匹配【5】排序【6】分组5、总结1、背景联合索引就是给多个列建一个索引,使用联合索引时要满足最左匹配原则,不然会索引失效,本篇文章就通过explain执行计划研究一下联合索引,能让我们避免使用联合索引的一些坑。2、数据示例创建一张表,有三个索引:主键索引、普通索引、联合索引,我们重点关注联合索引:CREATE TABLE test1( id INT AUTO_I

2025-01-13 17:49:39 1330

原创 【Go底层】singleflight包原理

看singleflight原码之后,要实现一个请求正在执行,相同的其它请求进来时直接报错的功能也很简单,将singleflight中等待第一个请求的逻辑改为直接返回错误就可以。

2025-01-09 18:49:32 521

原创 【MySQL】InnoDB存储引擎中的索引

通过本文学习到了,索引就是B+树对应的结构,放了方便我们根据某列快速找到想要的记录,根据B+树的不同又可以分为:聚簇索引、二级索引、组合索引。

2024-12-23 11:32:17 828

原创 【MySQL】InnoDB存储引擎中的页

本篇文章讲解了数据页的组成,页是存储数据的基本单位;每个页的文件头部都会有一个上下页号,组成了一个双向链表;页中每条行记录的next_record组成一个单项链表;InnoDB会把多条记录分为一个组,组里的最大记录的数据部分相对于页面开头的偏移量就设置为槽,查找记录时通过二分法查找所在的槽,再通过行记录的next_record属性找到对应的记录。

2024-12-19 10:28:06 965

原创 【MySQL】InnoDB引擎中的Compact行格式

本篇文章讲了Compact行格式组成,后面我们再讲解一下其它行格式。

2024-12-16 14:48:10 1166

原创 【MySQL】mysql中的事务

本文对事务的特性和事务之间的问题有了个大概的认知,后面会再细节讲解事务的回滚机制和MVCC实现原理。

2024-12-10 17:16:06 1317

原创 【MySQL】mysql服务器架构

简单了解mysql服务器的架构,对一条sql的执行流程有个大概的认识,后续再深入理解各个部分。

2024-12-07 18:35:37 532

原创 【Go底层】select原理

select虽然使用起来简单,但其实现逻辑还是比较复杂的,通过熟悉其实现,我们能理解对多个通道进行操作时候,可以为每一个通道创建一个协程去操作,这无疑增加了GC开销,但是使用select采用了多路复用的思想,将一个协程绑定在多个协程等待对象上,而且对case使用了随机顺序,确保每一个case都能公平的被执行。

2024-12-03 17:08:41 1439

原创 【Go底层】time包中Timer定时器原理

通过看Timer的源码之后,能更好的根据不同的业务场景去使用不同的定时器,对于不满足业务场景的定时器,可以采用工厂模式的方式封装一个自定义的定时器去满足我们的业务使用。

2024-12-01 18:21:47 835

原创 【Go底层】time包Ticker定时器原理

通过对Ticker对象中通道的理解,在select中有多个case时,对于准备好的case,select会从中随机选择一个,所以要注意case中如有Ticker的通道对象时,不一定会定时间隔的读取到数据。Ticker对象还提供了一些其它的函数:Stop(停止定时器)、Reset(重置定时器)、Tick(返回只读的时间通道)。

2024-11-29 17:57:14 1002

原创 【Go底层】通道原理

通过分析写chan、读chan的源码,我们在写代码时能很容易避免协程阻塞,能很清楚的理解未初始化chan和关闭chan对读写操作的影响。

2024-11-28 17:10:51 1172

原创 【Go底层】string和[]byte相互转换原理

字符串和字节数组转换虽然很简单,但是会带来一定的开销,当然并不是就不能使用这种转换方式,最主要还是根据我们的业务场景去使用,大部分业务场景性能要求并不是在这,但是我们也要尽量避免频繁的进行字符串和字节数组的相互转换。

2024-11-20 15:00:02 736

原创 【Go底层】切片扩容原理

切片进行扩容时,如果赋值给一个新的切片未进行扩容时,这时新切片和旧切片指向的底层数组是同一个,其中任意一个切片对底层数组的修改都会影响到另一个切片,所以我们根据切片的扩容计算逻辑在不同的业务场景初始化不同的长度和容量,减少多次扩容进行内存分配的开销。

2024-11-19 19:51:40 461

原创 【Go底层】+操作符拼接字符串原理

全是字符串常量的拼接是在编译阶段,带字符串变量的拼接是在运行阶段。运行阶段如果拼接字符串的总长小于临时buf(长度为32位),就使用临时buf作为字符串的底层数组使用,如果接字符串的总长大于临时buf,就在堆上申请一块新的空间给字符串使用。

2024-11-17 12:04:41 486

原创 【Golang】用gorm实现分页的功能

可以根据在线sql转go结构体import ("time"TotalPage int `json:"total_page"` //总页数TotalCount int `json:"total_count"` //总条数Page int `json:"page"` //当前页PageSize int `json:"page_size"` //当前页数据量PrevPage bool `json:"prev_page"` //是否存在上页。

2024-10-21 17:36:25 1217

原创 【Golang】go实现tlv协议

import ("bytes""fmt"Tag uint32// NewTLV//// @Description: 初始化tlv对象// @param opts 传入tag和value// @return *TLV 返回初始化后的tlv对象指针opt(tlv)return tlv// Encode//// @Description: 将TLV结构编码为二进制数据// @receiver t TLV对象// @return []byte 编码之后的二进制//写tagerr!

2024-10-15 16:24:38 597

原创 【Golang】使用gob格式存储数据到redis

/ 注册未知类型A intB stringC []intD []stringE interface{} //等会使用map[string]int{}类型测试F interface{} //等会使用map[string]string{}类型测试对于interface{}对应的未知类型,需要调用gob.Register()函数去注册,不然gob解码时会识别不出是什么类型,全局初始化一次就好。在工作中修改gob编码方式存储在redis之后,在数据量比较大的时候,相比json。

2024-10-12 17:57:32 619

原创 【Golang】网络传输protobuf格式数据

/protobuf版本//包名上文go中操作protobuf的步骤为:定义.proto文件、编译生成.go文件、进行序列化和反序列化,以及通过网络传输数据。protobuf还用于RPC协议中,使用protobuf可以定义RPC方法和消息结构,通过protoc编译后自动生成客户端和服务端代码,大大简化PRC系统的实现。谷歌就提供了高效的RPCgRPC。

2024-10-11 11:50:13 1140 1

原创 【Golang】对cron进行二次封装实现指定时间执行定时任务

import ("fmt""sync""time"const (HOUR = 1MINUTE = 2SECOND = 3jobId cron.EntryID //执行的任务idjobMutex sync.Mutex //防止并发问题startTime time.Time //定时任务从此时间开始执行intervalTime uint32 //任务执行间隔时间,不设置默认8小时intervalType uint8 //任务执行间隔类型,1-时,2.分,3-秒,不设置默认单位为时。

2024-10-08 17:41:05 1345 3

原创 【Golang】用go操作iptables和ipset设置黑白名单

/ ipset类型const (// ipset名称const (// iptables规则{"-m", "state", "--state", "ESTABLISHED,RELATED", "-j", "ACCEPT"}, //已建连接允许{"-i", "lo", "-j", "ACCEPT"}, //本地回环包运行{"-m", "set", "--match-set", WL_IP, "src", "-j", "ACCEPT"}, //对集合条目里的源ip允许。

2024-09-29 17:04:38 1471 2

原创 【Golang】双节点集群etcd未组成集群vip切换时序

上述vip从节点1切换到节点2之后,节点2上etcd相同key的版本为50,但是etcd服务端还是认为go_demo1和go_demo2的消费此key版本在100,在此key的版本不大于100之前都不会向go_demo1和go_demo2推送修改事件。在vip(虚拟ip)可以从一个节点切换到另一个节点,但etcd未组成集群的环境中,与etcd的连接会断开重连,但同一个key在不同节点的版本可能会不一样导致etcd服务器不向客户端推送数据,也就是客户端watch失效了,具体解决方法参考。

2024-09-26 20:12:00 559

原创 【Golang】用go解析国密pfx文件

函数来获取私钥和所有的证书,再通过证书里的颁发者和主题名等其它字段来获取我们想要的业务证书和ca证书。,下面会给出一个如何解析国密pfx文件的例子。对于包含多个证书和一个私钥的国密pfx文件,因此我们也可以直接使用。go的官方库已经支持。

2024-09-25 11:25:39 761 3

原创 【Golang】集群环境etcd未搭建集群进行手动重连

上述的场景适用于集群环境但etcd未组成集群的情况,通过检测到连接断开释放资源,新建连接重新watch来解决不同节点etcd因为不同而监听不到数据的情况。

2024-09-23 20:18:33 957 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除