- 博客(966)
- 收藏
- 关注
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人