自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ETCD的使用

etcd 使用指南 - 简书

2022-05-31 19:13:44 172

原创 PHP依赖注入和容器

Docker主要就是借助 Linux 内核技术Namespace来做到隔离的,其实包括文件的隔离,资源的隔离都是在新的命名空间下通过mount挂载的方式来隔离的。Do处。

2022-05-17 23:05:55 209

原创 HTTPS和HTTP区别

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https前者是80,后者是443。...

2022-05-16 20:31:53 105

原创 Go解决slice map线程不安全的原因与方法

slice线程不安全原因程全的情况主要是在内存的扩容两个协程同时写入到同一个空间的时候就会出现竞争;最终只有一个写入sync的锁机制map不安全原因Map在进行查找、赋值、遍历、删除的操作的时候都会对hamp.flags进行标记,如果发现有标记则直接panic1. 是运用sync.RWMutex 2. 是运用sync.Map...

2022-05-16 20:30:54 408

原创 Golang并发操作中常见的死锁情形

https://www.jb51.net/article/221391.htm#_label0第一种情形:无缓存能力的管道,自己写完自己读 第二种情形:协程来晚了 第三种情形:管道读写时,相互要求对方先读/写 第四种情形:读写锁相互阻塞,形成隐形死锁...

2022-05-16 16:26:32 247

原创 Golang心跳实现

客户端发送心跳请求+重试机制。重试X次失败则定义为离线服务端响应心跳请求+超时机制。超时X秒未收到心跳则离线//服务端​//全局变量var ids = make(map[string]chan byte)​func ResponseHeartBeat(id string) { if _, ok := ids[id]; ok { //保活心跳请求 ids[id] <- 0 } else { //上线触发器 ...

2022-05-16 16:24:19 891

原创 Golang调度器runtime

Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行 NumCPU:返回当前系统的 CPU 核数量 GOMAXPROCS:设置最大的可同时使用的 CPU 核数 Goexit:退出当前 goroutine(但是defer语句会照常执行) NumGoroutine:返回正在执行和排队的任务总数 GOOS:目标操作系统package mainimport ( "fmt" "runtime" "time")func main() {

2022-05-16 12:31:46 121

原创 Go的context:协程控制+上下文传递

并发控制方式sync.waitGroup 一个整体任务的部分任务,适用于自然结束的select+channel 灵活些但是需要设置channel,适用于一个协程环境context 适用于一个或多个协程结束context函数context.Background() 返回一个空的 Context,这个空的 Context 一般用于整个 Context 树的根节点。context.WithCancel(parent) 创建一个可取消的子 Context,然后当作参数传给 gorouti

2022-05-14 18:14:02 1536

原创 Linux环境变量

Linux环境变量配置全攻略 - 悠悠i - 博客园

2022-05-08 13:59:33 689

原创 Gin新建一个项目的流程与函数

main文件加载配置 初始化redis mongo ck routerrouter文件加载中间件 进行校验数据 控制器中有模型的对象,

2022-03-10 15:55:32 316

原创 Go使用go-clickhouse库

连接func NewCkConn(ckInfo config.CkConfig) (*dbr.Connection, error) { conn, err := dbr.Open("clickhouse", "http://"+ckInfo.Username+":"+ckInfo.Password+"@"+ckInfo.Host+":"+ckInfo.Port+"/"+ckInfo.Database, nil) if err != nil { return nil, err } retur

2022-03-04 11:52:01 3724 1

原创 Linux的Supervisor常用命令使用

supervisor 常用命令的使用 - 简书

2022-02-17 17:13:51 479

原创 Prometheus的查询promql

prometheus查询 - 道霖 - 博客园保姆级别的 PromQL 教程 - 墨天轮

2022-02-17 16:07:41 836

原创 Go的Gin框架获取GET POST参数 两个一样的

GETbody := struct { ResourceId string `json:"resource_id" bson:"resource_id" form:"resource_id"` ResourceType string `json:"resource_type" bson:"resource_type" form:"resource_type"` }{}var err errorerr = c.Bind(&body)POSTbody := struct

2022-02-14 18:02:40 496

原创 Go性能测试benchmark

教程:Go benchmark 详解 - YahuiAn - 博客园练习:github中包含了 命令行的执行及其结果go-box/practice/benchmark at master · 7117/go-box · GitHub

2022-01-21 18:33:07 213

原创 Go之JWT详解

JWT详解 | 包包的Tech Pool

2022-01-20 14:09:16 1021

原创 Git多个commit合并成一个【中间提交合并 尾部提交合并】

尾部提交合并将msg B,msg C,msg D这3个commit合并成1个commit1 查看当前的提交信息执行命令:git log,可以查看当前的一些提交信息 msg A,msg B,msg C,msg D。2 合并多个commitgit rebase -i [startpoint] [endpoint]其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[

2022-01-14 17:53:36 6426

原创 Go使用Convey单元测试Monkey打桩

Golang 实现 monkey patch - 简书

2021-12-16 20:23:24 838

原创 HTML教程pink的笔记总结

HTML https://blog.csdn.net/wuyxinu/article/details/103515157CSS https://blog.csdn.net/wuyxinu/article/details/103583618JS https://blog.csdn.net/wuyxinu/article/details/103642800JS-下 https://blog.csdn.net/wuyxinu/article/details/103646041还有jQuery的 https

2021-12-15 18:57:07 164

原创 Mongo使用navicat解除14天限制

第一步:关闭Navicat第二步:打开注册表编辑器,win + R, 输入regedit第三步:在最上方搜索框输入HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium将Registration15XCS文件夹 和Update文件夹删除第四步:在最上方搜索框输入:HKEY_CURRENT_USER\Software\Classes\CLSID倒叙展开(因为一般都在最后几个文件夹中)每一个文件夹,如..

2021-12-14 17:00:24 3708

原创 Go使用mgo增删改查聚合操作

包github.com/globalsign/mgo查询查询所有query := func(c *mgo.Collection) (interface{}, error) {q := bson.M{"widget_id": param.WidgetId, "chart_id": param.ChartId, "is_show": bson.M{"$ne": 0}}var items []new_panel.Metricif err := c.Find(q).All(&a...

2021-12-14 16:39:04 603

原创 Go原始获取Get Post方式的数据

Get defer ctx.Request.Body.Close() WidgetId := ctx.Request.URL.Query().Get("widget_id") MetricId := ctx.Request.URL.Query().Get("metric_id") ChartId := ctx.Request.URL.Query().Get("chart_id") param := new_panel.WidgetMetric{ ChartId: ChartId

2021-12-14 16:26:34 293

原创 MySQL搭建主从复制 读写分离 分库分表 MyCat高可用

Mysql主从复制环境的介绍系统环境:centos7.0客户端连接工具:xshell远程文件传输工具:xftp服务器:192.168.126.138(主) 192.168.126.139(从)基于rpm实现MySQL的安装#查看有没有安装MySQLrpm -qa | grep -i mysql#卸载rpm -e --nodeps mysql-community-client-5.7.28-1.el7.x86_64#查找find / -name mysql#删除.

2021-12-14 16:21:01 651

原创 Gin实际编写中间件

路由的使用router.GET("/v1/metata/metric-maer/metric-cagory", metadataHandler.Category)router.Use(middleware.CloudProduct(config.GetConfiguration()))router.PUT("/v1/metada/metic-nager/diion", metadataHandler.PutDimension)具体的代码// CloudProduct 验证云产品的权限.

2021-12-14 16:17:51 87

原创 Gin使用mongo进行增删改查/聚合/数据转换

包go.mongodb.org/mongo-driver/mongo查询查询Count包含了过滤+回调函数+执行三部分filter := primitive.M{}filter["monitor_ta"] = body.MonitorTypefilter["catego"] = body.categofilter["status"] = primitive.M{"$ne": DelStatus,}query := func(collection *mongo.Collection...

2021-12-14 16:13:34 811

原创 ClickHouse数据库配置

#DataSourceSettings##LocalDataSource: [email protected]#BEGIN#<data-source source="LOCAL" name="[email protected]" uuid="6a7eaf0e-59b8-4ea1-bd36-51560ab254f7"><database-info product="ClickHouse" version="21.11.5.33" jdbc-version=.

2021-12-10 18:54:30 1180

原创 Go使用HTTPClient发送Get Post请求

Get请求 url := c.Host + WarningNum req, err := http.NewRequest("GET", url, nil) q := req.URL.Query() q.Add("psaId", paramGet.PsaId) q.Add("paasZoneCode", paramGet.PaasZoneCode) req.URL.RawQuery = q.Encode() req.Header.Add("Content-Type", "applic

2021-11-05 14:53:05 871

原创 Go的string/int/int64转化

string到intint,err:=strconv.Atoi(string)string到int64int64, err := strconv.ParseInt(string, 10, 64)int到stringstring:=strconv.Itoa(int)int64到stringstring:=strconv.FormatInt(int64,10)

2021-11-01 19:45:24 2452

原创 Linux客户端连接虚拟机的坑坑坎坎

ssh软件安装没防火墙关闭了没

2021-10-18 14:39:56 74

原创 Go原生获取Get Post参数的方法

GET defer ctx.Request.Body.Close() ChartId := ctx.Request.URL.Query().Get("chart_id") WidgetId := ctx.Request.URL.Query().Get("widget_id")POST defer ctx.Request.Body.Close() body, err := ioutil.ReadAll(ctx.Request.Body) if err != nil {

2021-09-29 20:02:01 504

原创 Gol使用mgo完成distinct与group操作

distinctquery := func(c *mgo.Collection) (interface{}, error) { q := bson.M{} var items []string err := c.Find(q).Distinct("widget_name", &items) if err != nil { return nil, err } fmt.Println(items) return items, nil }res, err :

2021-09-14 17:51:39 677

原创 Go使用swagger:方法说明+案例说明

https://blog.csdn.net/qq_37493556/article/details/104081138

2021-09-08 11:31:51 876

原创 Goland显示“Cannot resolve symbol XXX“ 进行更新IDE的索引库

菜单“File” -> “Invalidate Caches / Restart”→ “Invalidate and Restart”。

2021-09-07 19:39:44 2350

原创 Go安装swagger:swagger的安装与使用

https://blog.csdn.net/qq_37493556/article/details/104081138

2021-09-07 19:39:10 875

原创 TCP三次握手四次挥手 TCP/UDP区别

三次握手第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和..

2021-08-17 22:45:12 242 1

原创 Redis分布式锁的实现

不存在就会设置一个锁key,锁定资源代码执行完毕,资源使用完毕后,这个key过期,释放锁,其他可以继续用了。如果出现了这么一个问题:如果setnx是成功的,但是expire设置失败,那么后面如果出现了释放锁失败的问题,那么这个锁永远也不会被得到,业务将被锁死?解决的办法:使用set的命令,同时设置锁和过期时间set参数:set key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:设置失效时长,单位秒PX m.

2021-08-17 00:39:14 93 1

原创 RabbitMQ应对不同阶段丢失消息的处理方案

生产者丢数据RabbitMQ提供transaction和confirm模式来确保生产者不丢消息。transaction机制就是说,发送消息前,开启事务(channel.txSelect()),然后发送消息,如果发送过程中出现什么异常,事务就会回滚(channel.txRollback()),如果发送成功则提交事务(channel.txCommit())。消息队列丢数据处理消息队列丢数据的情况,一般是开启持久化磁盘的配置。这个持久化配置可以和confirm机制配合使用,你可以在消息持久化磁盘后

2021-08-16 23:59:54 232

原创 RabbitMQ消息重复消费问题

业务背景消息队列在数据传输的过程中,为了保证消息传递的可靠性,一般会对消息采用ack确认机制,如果消息传递失败,消息队列会进行重试,此时便可能存在消息重复消费的问题。比如,用户到银行取钱后会收到扣款通知短信,如果用户收到多条扣款信息通知则会有困惑。解决方法一:send if not exist首先将 RabbitMQ 的消息自动确认机制改为手动确认,然后每当有一条消息消费成功了,就把该消息的唯一ID记录在Redis 上,然后每次发送消息时,都先去 Redis 上查看是否有该消息的 ID,如果

2021-08-16 23:04:02 6771 2

原创 Laravel 队列:如何查看队列报错信息

Laravel 队列在执行时,如黑盒一样,出错时我们该如何调试呢?方法一、sync 驱动如果你在开发环境,修改.env:QUEUE_DRIVER=sync这样就可以直接通过 Web 请求触发点看到出错信息。方法二、failed-tableLaravel 自带了一张failed_jobs数据表用来记录所有错误的队列,需使用以下命令初始化:php artisan queue:failed-tablephp artisan migrate出错后在数据库里即可看到报错信息...

2021-08-13 11:11:41 435

原创 Go的channel与map是否并发安全以及原因

channel安全:底层实现出队入队时也加锁了map不安全:加互斥锁或者读写锁

2021-08-12 21:25:05 986

空空如也

空空如也

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

TA关注的人

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