自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 资源 (8)
  • 收藏
  • 关注

原创 基于数据库实现分布式锁

基于数据库的实现方式的核心思想是:在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引,想要执行某个方法,就使用这个方法名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。...

2022-08-03 14:37:17 1316 1

原创 PHP+zookeeper实现分布式锁

1、redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能;zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小2、如果是redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁;而zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁。...

2022-07-08 15:06:43 1244

原创 PHP+Redis实现分布式锁

分布式锁实现的注意点:1)互斥: 任意时刻, 只能有一个客户端获得锁2)不会死锁: 客户端持有锁期间崩溃, 没有主动解除锁, 能保证后续的其他客户端获得锁3)锁归属标识: 加锁和解锁的必须是同一个客户端, 客户端不能解掉非自己持有的锁(锁应具备标识)4)如果是Redis集群, 还得考虑具有容错性:只要大部分Redis节点正常运行, 客户端就可以加锁和解锁....

2022-07-08 13:45:59 3832

原创 分布式锁介绍

由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的应用并不能提供分布式锁的能力。为了解决这个问题就需要一种跨机器的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题...

2022-07-08 13:41:33 302

原创 分布式事务2PC和3PC原理

两阶段提交又称2PC,2PC是一个非常经典的强一致、中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点(partcipant)。两个阶段:第一阶段:投票阶段 和第二阶段:提交/执行阶段。...

2022-07-07 14:42:02 177

原创 分布式事务解决方案之可靠消息最终一致性

可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息, 事务参与方(消息消费者)一定能够接收消息并处理事务成功 ,此方案强调的是只要消息发给事务参与方最终事务要达到一致。...

2022-07-07 14:28:39 411

原创 分布式事务解决方案之TCC

分布式事务解决方案之TCC

2022-07-06 16:45:18 2984

原创 分布式事务解决方案之2PC

XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。...

2022-07-06 16:39:44 653

原创 分布式事务介绍

分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务 ,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。......

2022-07-06 16:29:28 365

原创 分布式全局ID生成方案

数据库自增ID、批量生成ID、UUID、取当前毫秒数、Redis生成ID、类snowflake算法

2022-07-06 16:25:13 634

原创 kafka消息丢失解决方案

生产阶段: 在这个阶段,从消息在 Producer 创建出来,经过网络传输发送到 Broker 端。存储阶段: 在这个阶段,消息在 Broker 端存储,如果是集群,消息会在这个阶段被复制到其他的副本上。消费阶段: 在这个阶段,Consumer 从 Broker 上拉取消息,经过网络传输发送到 Consumer 上。...

2022-07-05 14:31:29 6257 3

原创 kafka消息重复消费解决方案

Kafka消费者以消费者组(Consumer Group)的形式消费一个topic,发布到topic中的每个记录将传递到每个订阅的消费者组中的一个消费者实例。Consumer Group 之间彼此独立,互不影响,它们能够订阅相同的一组主题而互不干涉。......

2022-07-05 14:28:14 8148

原创 消息队列:消息积压如何处理?

在使用消息队列遇到的问题中,消息积压这个问题,应该是最常遇到的问题了,并且,这个问题 还不太好解决。我们都知道,消息积压的直接原因,一定是系统中的某个部分出现了性能问题,来不及处理上游发送的消 息,才会导致消息积压。...

2022-07-05 14:24:17 2597

原创 消息队列:重复消息如何处理?

在消息传递过程中,如果出现传递失败的情况,发送方会执行重试,重试的过程中就有可能会产生重复的消息。对使用消息队列的业务系统来说,如果没有对重复消息进行处理,就有可能会导致系统的数据出现错误。...

2022-07-05 14:14:02 840

原创 消息队列:如何确保消息不会丢失

使用消息队列最常遇到的问题,也是最头痛的问题就是丢消息了。对于大部分业务系统来说,丢消息意味着数据丢失,是完全无法接受的。其实,现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制,完全可以做到在消息传递过程中,即使发生网络中断或者硬件故障,也能确保消息的可靠传递,不丢消息。绝大部分丢消息的原因都是由于开发者不熟悉消息队列,没有正确使用和配置消息队列导致的。虽然不同的消息队列提供的 API 不一样,相关的配置项也不同,但是在保证消息可靠传递这块儿,它们的实现原理是一样的。...

2022-07-05 14:07:17 1296

原创 常用消息队列有哪些?

常用消息队列介绍:Kafka、ActiveMQ、RabbitMQ、RocketMQ

2022-07-05 14:03:13 3282

原创 什么是消息队列?

消息队列MQ的主要作用:异步处理,应用解耦,流量削锋和消息通讯

2022-07-05 13:56:19 4153 1

原创 集群、分布式、微服务的区别和介绍

集群、分布式、微服务 区别与介绍

2022-07-04 14:47:16 2769 2

转载 WEB架构设计过程

WEB架构设计过程

2022-07-04 14:42:23 665

原创 架构设计的五个核心要素

架构中五个重要的核心指标:分别是性能、可用性、伸缩性、扩展性和安全性。

2022-07-04 14:37:23 1293

原创 gorm 操作mysql

目录一、gorm介绍二、gorm安装三、gorm模型定义1、ORM介绍2、gorm模型定义3、gorm模型标签4、定义表名5、gorm.Model6、自动更新时间四、gorm连接数据库1、配置DSN (Data Source Name)2、使用gorm.Open连接数据库3、gorm调试模式4、gorm连接池一、gorm介绍GORM是Golang目前比较热门的数据库ORM操作库,对开发者也比较友好,使用非常方便简单,使用上主要就是把

2022-04-21 16:59:37 7553 3

原创 go操作mysql

目录一、使用包database/sql1、DB(数据库对象)2、Results 和 Result(结果集)3、Statements(语句)二、增删改 Exec()方法三、Query() 方法使用四、Get() 方法使用五、Select() 方法使用六、连接池1、连接池说明2、连接池配置3、数据库连接重试次数一、使用包database/sqldatabase/sql 是 Go 操作数据库的标准库之一,它提供了一系列接口方法,用于访问数据库(mys

2022-04-21 16:49:31 9680

原创 go解析命令行参数 flag包

目录一、获取命令行参数二、flag包基本使用1、flag参数类型2、定义命令行flag参数3、flag其他函数4、flag包完整示例Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。一、获取命令行参数os.Args:如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。package mainimport ( "fmt" "os")//os.Args

2022-04-20 13:42:27 376

原创 go开发工具包 com

目录一、安装二、具体使用1、url2、path3、string4.time5.slice6.regexp7.file8.dir9.convert转换10.commad源码地址:https://github.com/Unknwon/com比较小巧实用,很多比较常用的功能,不用重复造轮子了,直接拿来就用,方便一、安装go get -u github.com/Unkown/com二、具体使用1、urlfunc Url.

2022-04-20 12:00:15 534

原创 go struct标签详解

目录一、结构体标签介绍二、json标签三、gorm标签四、form标签五、binding标签六、ini标签一、结构体标签介绍结构体的字段除了名字和类型外,还可以有一个可选的标签(tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。Tag是结构体在编译阶段关联到成员的元信息字符串,在运行的时候通过反射的机制读取出来。结构体标签由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。键值对之间使用一个空格分隔`key1:"valu

2022-04-15 16:26:54 3637 2

原创 go结构体嵌套

一个结构体中可以嵌套包含另一个结构体或结构体指针。//Address 地址结构体type Address struct { Province string City string}//User 用户结构体type User struct { Name string Gender string Address Address}func main() { //直接实例化该嵌套结构体 user1 := User

2022-04-15 16:20:48 4172

原创 go中Struct 结构体详解

目录一、结构体定义1、结构体的定义2、结构体字段的可见性3、结构体的匿名字段二、结构体实例化1、基本实例化2、针类型实例化3、取地址实例化三、结构体初始化1、两种初始化的方式2、使用“键值对",值列表两种初始化四、使用结构体实现构造函数五、结构体的“继承”一、结构体定义Go语言中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供...

2022-04-15 16:19:13 6310

转载 go函数延迟调用defer

目录一、defer执行顺序二、延迟执行顺序1、使用延迟并发解锁2、使用延迟释放文件句柄在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。不是defer的语句还是按照之前的执行顺序,顺序执行一、defer执行顺序package mainimport ( "fmt")func main() { fmt.Println...

2022-04-15 16:10:42 129

原创 go中宕机与恢复 panic/recover 介绍

目录一、panic 宕机二、recover恢复三、panic和recover的关系Go 语言可以在程序中手动触发宕机,让程序崩溃,这样开发者可以及时地发现错误,同时减少可能的损失。Go 语言程序在宕机时,会将堆栈和 goroutine 信息输出到控制台,所以宕机也可以方便地知晓发生错误的位置.一、panic 宕机func panic(v interface{})panic() 的参数可以是任意类型,后文将提到的 recove...

2022-04-14 15:57:09 794

原创 go指针就是这么简单

目录一、Go语言中的指针二、指针类型、指针地址三、指针取值四、空指针五、new和make1、new2、make3、new与make的区别区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。要搞明白Go语言中的指针需要先知道3个概念:指针类型、指针取值、指针地址。一、Go语言中的指针Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝...

2022-04-14 15:51:46 244

原创 阻塞死锁详解

目录一、通道阻塞/死锁示例二、死锁解决办法1、方法一:先消费channel2、方法二:用缓冲通道三、信道数据的进出顺序1、无缓冲信道2、缓冲信道四、等待多gorountine的方案一、通道阻塞/死锁示例死锁:所有的线程或进程都在等待资源的释放1)死锁示例一func main() { ch := make(chan int) <- ch // 阻塞main goroutine, 信道ch被锁}//执行这个程序你会看到Go

2022-04-13 14:46:11 368

原创 select 多路复用

目录一、循环接收多个信道的问题二、select详解一、循环接收多个信道的问题在使用通道时,想同时接收多个通道的数据是一件困难的事情。通道在接收数据时,如果没有数据可以接收将会发生阻塞。虽然可以使用如下模式进行遍历,但运行性能会非常差。for{ // 尝试接收ch1通道 data, ok := <-ch1 // 尝试接收ch2通道 data, ok := <-ch2 // 接收后续通道 …}二、sele

2022-04-13 14:39:45 1184

原创 Channel 通道详解

目录一、通道介绍1、声明通道2、创建通道二、channel操作1、发送2、接收3、关闭三、无缓冲通道四、有缓冲的通道五、循环读取信道六、关闭通道七、单向通道一、通道介绍单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的 goroutine 中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。

2022-04-12 09:45:06 66266

原创 goroutine详解

目录一、创建 goroutine1、启动单个协程2、使用goroutine的问题3、启动多个goroutine二、使用匿名函数创建goroutine一、创建 goroutineGo 程序中使用go关键字为一个函数创建一个 goroutine。一个函数可以被创建多个 goroutine,一个 goroutine 必定对应一个函数。go 函数名( 参数列表 )使用 go 关键字创建 goroutine 时,被调用函数的返回值会...

2022-04-12 09:35:36 486

原创 并发和并行介绍

目录一、进程和线程二、并发和并行三、协程和线程四、并发不是并行一、进程和线程1)进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。 2)线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 3)一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。二、并发和并行A. 多线程程序在一个核的cpu上运行,就是并发。 B. 多线程程序在多个核的cpu上运行,就是并行。并发

2022-04-11 11:18:04 230

原创 “The selected directory is not a valid home for Go Sdk“

在配置 goland GOROOT SDK 的过程中,一直报错如下:"The selected directory is not a valid home for Go Sdk"查看go版本D:\go-codes> go versiongo version go1.17.3 windows/amd64解决:1. 在 golang 安装路径下寻找:'go1.17.2\src\runtime\internal\sys\zversion.go' 文件2. 打...

2022-04-11 11:03:02 3043 2

原创 GOPATH 详解

目录一、重要的几个环境变量二、GOPATH设置1、使用命令行查看GOPATH信息2、linux下使用GOPATH的工程结构3、windows下设置GOPATH4、在多项目工程中使用GOPATH三、配置完GOPATH后的工作目录1、适合个人开发者2、目前流行的项目结构3、适合企业开发者一、重要的几个环境变量$GOROOT表示 Go 的安装目录,它的值一般都是$HOME/go,当然,你也可以安装在别的地方。 $GOARCH表示目标机器(目标机器是指...

2022-04-11 11:00:50 12432 2

原创 go 格式化占位符详解

目录1、通用占位符(打印不同类型)2、布尔型3、整型4、浮点数与复数5、字符串和[]byte6、指针7、宽度标识符8、其他falgfmt包的*printf系列函数都支持format格式化参数,在这里我们按照占位符将被替换的变量类型划分,方便查询和记忆。1、通用占位符(打印不同类型) 占位符 说明 %v 值的默认格式表示 %+v 类...

2022-04-06 14:06:20 2929

原创 go基准测试,获得代码内存占用和运行效率的性能数据

目录一、基准测试基本使用二、基准测试原理三、自定义测试时间四、测试内存五、控制计时器基准测试可以测试一段程序的运行性能及耗费 CPU 的程度。Go 语言中提供了基准测试框架,使用方法类似于单元测试,使用者无须准备高精度的计时器和各种分析工具,基准测试本身即可以打印出非常标准的测试报告。一、基准测试基本使用package mainimport "testing"func Benchmark_Add(b *testing.B) { va...

2022-04-06 13:40:11 1656

原创 go单元测试

目录一、go单元测试介绍二、单元测试使用1、单元测试命令2、运行指定单元测试用例3、标记单元测试结果4、单元测试日志一、go单元测试介绍单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是...

2022-04-06 10:07:22 3219

PowerDesigner16.5实战教程

PowerDesigner 主要分为 7 种建模文件: 1、 概念数据模型 (CDM) (Conceptual Data Model) 对数据和信息进行建模,利用实体-关系图(E-R 图)的形式组织数据,检验数据设计 的有效性和合理性。 与具体的数据管理系统(Database Management System,简称 DBMS)无关。 概念数据模型必须换成逻辑数据模型,才能在 DBMS 中实现。 2、 逻辑数据模型 (LDM) PowerDesigner 15 新增的模型。逻辑模型是概念模型的延伸,表示概念之间的逻辑次 序,是一个属于方法层次的模型。具体来说,逻辑模型中一方面显示了实体、实体的属性和实体之间的关系,另一方面又将继承、实体关系中的引用等在实体的属性中进行展示。逻辑模型介于概念模型和物理模型之间,具有物理模型方面的特性,在概念模型中的多对多关系...

2023-04-01

axure元件库(web后台+移动端+图标)

悉心整理的axure元件库,内容全面,对于常用的元件设计类别做了整理。包含web系统后台,web官网,常用图标库,小程序,H5,APP。供下载学习下载!

2019-09-22

axure元件库整理汇总大全

axure元件库整理汇总大全,包含重用的图标,网站后台,移动端设计,供大家学习下载

2019-09-22

史上最详细的一线大厂Mysql面试题详解

史上最详细的一线大厂Mysql面试题详解,超级详细,供大家学习!!

2019-09-10

axure后台管理系统通用模板.zip

web管理系统通用axure原型模板,登录,导航,列表,表单等,供大家学习

2019-09-10

深入理解PHP内核-高清

深入理解PHP内核-高清版,详细介绍了PHP内核的工作原理,最好的介绍内核的书,没有之一!

2018-11-30

高性能PHP应用开发-高清扫描

高性能PHP应用开发-高清扫描,php网站优化整体思路,讲解的很全面

2018-11-16

PHP核心技术与最佳实践-高清版

PHP核心技术与最佳实践-高清版,全方位的描述php技术和相关的其他高级特性

2018-11-15

门户网站架构设计

全面的门户网站架构设计,包括设计思路,系统结构,网络规划及性能计算,性能模拟测试及性能推算等

2018-04-24

空空如也

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

TA关注的人

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