自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HTTP 响应头Cache-Control

需要注意的是,在max-age指定的时间之内,浏览器不会向服务器发送任何请求,包括验证缓存是否有效的请求,也就是说,如果在这段时间之内,服务器上的资源发生了变化,那么浏览器将不能得到通知,而使用老版本的资源。如果设置了public,表示该响应可以在浏览器或者任何中继的Web代理中缓存,public是默认值,即Cache-Control:max-age=60等同于Cache-Control:public, max-age=60。当前的所有浏览器都支持 Cache-Control,因此,使用它就够了。

2023-09-21 11:23:20 915

原创 Nginx index指令 设置网站默认首页

斜杠代表location定位的路径,路径当中最重要的字段就是root。root默认值就是html,这个就是nginx安装路径下面的html文件夹作为root的路径。默认不配置就是root下面的内容,index指定了主页的内容。location斜杠表示服务的根目录,这里index指令是去指定首页。root你这里可以更改为自己想要设置的目录,并且它的相对路径是在nginx的安装路径下面。如果你需要写绝对路径,那么前面加入斜杠/nginx/。

2023-09-21 10:52:50 8222

原创 HTTP 协商缓存 ETag、If-None-Match

(3)服务器再次收到资源请求时,根据浏览器传过来If-None-Match和然后再根据资源生成一个新的ETag,如果这两个值相同就说明资源没有变化,否则就是有变化;与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时,由于ETag重新生成过,response header中还会把这个ETag返回,即使这个ETag跟之前的没有变化。(1)浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在respone header加上ETag。

2023-09-20 17:54:54 861

原创 应用层 DNS 怎样测试域名解析是否生效? ping nslookup

如果运营商强制设置了更长的域名解析记录的缓存时间,将会导致修改或删除解析记录生效的延迟,最长预计48小时,修改期间,需要保证修改前后的IP地址都能够正常提供服务。域名解析正常但是网站无法访问,需要排查搭建网站的云服务器是否正确绑定域名,或网站是否完成备案。添加域名的解析记录集后,将此解析同步至DNS服务器后才可以生效,这个过程所需要的时间就是解析生效时间。说明:使用Ping命令时,解析是否生效与域名能否Ping通没有直接联系,执行“ping 域名”命令后,的解析是否生效,执行命令。检查A类型解析是否生效。

2023-09-20 11:58:38 1716

原创 Golang gorm 一对一关系

一对一关系比较少,一般用于表的扩展例如一张用户表,有很多字段那么就可以把它拆分为两张表,常用的字段放主表,不常用的字段放详情表。单单使用take find这些是查询不出teacherinfo的信息的。针对用户表来说可以通过user去点出userinfo。想要查询用户详情使用preload。

2023-09-19 22:46:16 623

原创 应用层 DNS Linux 下解析域名命令 dig 命令使用详解

默认情况下 dig 命令查询 A 记录,上图中显示的 A 即说明查询的记录类型为 A 记录。在尝试查询其它类型的记录前让我们先来了解一下常见的 DNS 记录类型。由于一些原因,希望从指定的 DNS 服务器上进行查询(从默认的 DNS 服务器上获得的结果可能不准确)。A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。NS 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。这样结果中就只有 CNAME 的记录。

2023-09-19 14:28:59 956

原创 Golang 变量作用域陷阱 误用短声明导致变量覆盖

在此代码段中,remember 变量永远不会在 if 语句外面变成 true,如果 something 为 true,由于使用了短声明 :=,if 语句内部的新变量 remember 将覆盖外面的 remember 变量。但是在 if 语句外面,变量 remember 的值变成了 false。,并且该变量的值为 true,

2023-09-14 22:20:25 372

原创 Golang Gorm 创建HOOK

钩子函数比较简单,就是实现before create的一个方法。创建的时候,在插入数据之前,想要做一些事情。

2023-09-14 19:54:26 624

原创 Golang GoRoutine MPG 模式浅析

M代表主线程向下执行,p上下文可以根据系统情况开启协程去工作。M可能有很多,可能全部在一个CPU上面,也可能每个M都在各个不同的CPU上面,这样就叫做并行。当有协程被阻塞的时候,它有来回切换的一种机制。可以保证主线程的执行,也能够让排队的G协程得到执行的机会。

2023-09-14 19:32:26 494

原创 Shell 数组 定义、增删改查、简单示例

为什么会产生Shell数组?通常在开发Shell脚本时,定义变量采用的形式为“a=1;b=2;c=3”,可如果有多个变量呢?这时再逐个地定义就会很费劲,并且要是有多个不确定的变量内容,也会难以进行变量定义,此外,快速读取不同变量的值也是一件很痛苦的事情,于是数组就诞生了,它就是为了解决上述问题而出现的。如果读者有过其他语言的编程经历,那么想必会熟悉数组的概念。简单地说,Shell的数组就是一个元素集合,它把有限个元素(变量或字符内容)用一个名字来命名,然后用编号对它们进行区分。

2023-09-14 16:04:25 290

原创 Nginx listen 监听端口详解

如果只有一块网卡,那么只有一个IP,如果是虚拟样还有虚拟网卡的IP,这样实际上就会涉及到多个IP,*代表所有的IP。和*.8000一样,表示将服务器所有支持的ip地址都绑定了端口,这样所有的IP地址都可以提供服务。(一般不会写在listen的后面,一般ssl在其他的地方配置,配置了ssl那么该端口只提供ssl的服务,说白了就是https)(能够承载多少tcp的连接,设置的越大,承载的tcp连接越多,反之)对于IP协议来讲,可以只配置端口,可以只配置IP,也可以IP和端口都配置。

2023-09-14 14:09:25 5849

原创 Golang struct 结构体 面向对象编程思想-抽象 理解抽象

当你将一类事物的属性和行为抽取出来之后,下一步就是将代码体现出来。提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象。我们在前面去定义一个结构体时候,实际上就是把一类事物的共有的。属性(字段)和行为(方法)

2023-09-14 09:16:43 360

原创 Golang gorm manytomany 多对多 更新、删除、替换

(3)之后就是最关键的要去执行什么操作,这里是delete,删除谁呢?删除的就是article关联的tag。(2)Association然后去连接tags第三张表。(1)model 先拿到这张表,

2023-09-13 21:37:57 875 1

原创 Golang goroutine 进程、线程、并发、并行 | 线程vs协程

并行:因为是在多个cpu上(比如有10个cpu),比如有10个线程,每个线程执行10毫秒(各自在不同cpu上执行),从人的角度看,这10个线程都在运行,但是从微观上看,在某一个时间点看,也同时有10个线程在执行,这就是并行。并发:因为是在一个cpu上,比如有10个线程,每个线程执行10毫秒(进行轮询操作),从人的角度看,好像这10个线程都在运行,但是从微观上看,在某一个时间点看,其实只有一个线程在执行,这就是并发。2)线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位。

2023-09-12 22:50:28 424

原创 Golang Array 数组使用注意事项和细节

有默认值数值类型数组:默认值为0 字符串数组: 默认值为"" bool数组: 默认值为false (其实在定义数组的时候,空间就已经分配了,只是没有赋值使用默认值而已)1) 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。8) Go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会相互影响。第一个编译不过:数组在传递的时候长度是类型的一部分,这里是数组给了切片,编译不通过。一个是值拷贝,一个是指针,如果数据很庞大,那么值拷贝是非常耗费资源的。

2023-09-12 20:33:49 387

原创 Golang gin Cookie的使用

Cookie 返回请求中提供的命名 cookie,如果未找到则返回 ErrNoCookie。并返回命名的 cookie 是未转义的。如果多个 cookie 与给定名称匹配,则只会返回一个 cookie。提供的 cookie 必须具有有效的名称。无效的 cookie 可能会被静默丢弃。httpOnly bool :是否允许别人通过js获取自己的cookie。maxAge int:cookie存活时间,单位为秒。path:cookie所在目录。name:cookie的名称。value:cookie的值。

2023-09-12 19:15:21 665

原创 Gorm 错误处理 ErrRecordNotFound error

在 Go 语言中,错误处理是很重要的。Go 语言中鼓励人们在任何之后去检查错误。

2023-09-12 17:35:00 1457

原创 Jenkins List Git Branches插件 构建选择指定git分支

选择【配置】—>【高级】,在【branch filter】添加“refs/heads/(.*)”,点击保存。点击【build with praameters】,可以选择git分支版本了。我这里选择gitee,其他类似。仓库如果不是公开的,需要配置key。选择【build with parameters】分支名称更简洁了。6)优化git分支名称。

2023-09-12 11:12:51 3251

原创 shell 循环读取文件中每一行的方法详解

使用while循环和for循环都是读取文件中每一行的常见方法。while循环适用于处理大型文件,而for循环适用于处理小型文件。在使用这两种方法时,需要注意文件中每一行的格式,以便正确读取和处理每一行的内容。

2023-09-11 16:14:25 8667

原创 consul 备份还原导入导出

工作中要保证生产环境部署的consul的集群能够安全稳定地对外提供服务,即使出现系统故障也能快速恢复,这里将讲述部分的备份还原操作及KV的导入导出操作。

2023-09-11 15:19:18 910

原创 Shell 函数详解(函数定义、函数调用、参数变量)

如果你嫌麻烦,函数定义时也可以不写 function 关键字:name() {statementsstatements我建议使用标准的写法,这样能够做到“见名知意”,一看就懂。

2023-09-11 15:03:58 2625

原创 consul 概念 键值对操作命令

redis/config会生成两个目录,connection会生成文件,文件里面的值为5。

2023-09-11 11:53:22 288

原创 Nginx中 location和proxy_pass 斜杠/ 问题

location /doc/ 强烈建议使用这种匹配模式求Path固定为创建时填写创建时填写的API请求Path为前缀例如,请求路径为/test/AA,使用前缀匹配时,通过/test/AA/CC可以访问,但是通过/test/AACC无法访问。使用前缀匹配时,匹配剩余的路径将透传到后端。例如,使用前缀匹配,前端请求路径定义为/test/,后端请求路径定义为/test2/,通过/test/AA/CC访问API,则后端收到的请求url为/test2/AA/CC。

2023-09-08 14:08:01 1019 1

原创 Golang 方法使用的注意事项和细节

方法的声明(定义)1)参数列表:表示方法输入2) recevier type:表示这个方法和type这个类型进行绑定,或者说该方法作用于type类型3)receiver type:type可以是结构体,也可以其它的自定义类型 type integer int4) receiver:就是type类型的一个变量(实例),比如:Person结构体的一个变量(实例)5)返回值列表:表示返回的值,可以多个6)方法主体:表示为了实现某一功能代码块7)return语句不是必须的。

2023-09-08 09:28:29 312

原创 Jenkins Jenkinsfile管理 Pipeline script from SCM

Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中(即把Jenkinsfile文件放到gitlab的代码仓库中,Jenkins构建任务时,拉取该仓库到本地,然后读取Jenkinsfile的内容,执行相关的步骤。通过Jenkinsfile文件,控制Jenkins版本发布,2、选择我们要拉取的代码。

2023-09-06 13:59:27 1180

原创 Gorm 实战 图书馆系统管理案例

binding标签表示是必填项,token是可以为空的,因为一开始注册的时候token的为空。只有登入的时候才有token。user.gobook.go多对多关系可以在user这层定义也行,在book这一层定义也可以。这个主要看你的一个实际使用的场景,这里在book模型里面去定义就行了。还需要去定义一个中间表的模型user_m2m_book.go这里不需要自定义表名,它只有一个主键,也没有其他属性了。它也是永了外键,也是使用了那两个模型的主键。

2023-08-29 15:08:22 307

原创 Golang Gorm 一对多的添加

一对多的添加有两种情况,一种是添加用户的时候,一起创建文章。其次是创建文章关联已经存在的用户。最后一种就是关联已有用户。

2023-08-28 09:39:43 897

原创 Golang Gorm 一对多 preload预加载

的数据,gorm就提前把这张表全部取出来,然后再执行。,最后把两种数据一一对应起来。

2023-08-26 09:38:05 1638

原创 Golang struct 结构体注意事项和使用细节 内存、转换、序列化

可以看到指针的地址也是连续的。r1有两个*point类型,这个两个*Point类型的本身地址也是连续的,但是他们指向的地址不一定是连续。一个int类型刚好8个字节。可以看到结构体的字段在内存当中是连续分布的,通过地址的加减来找到对应的数据。字段名称,字段类型,字段个数都得一致才可以转。

2023-08-25 15:41:03 948

原创 Golang Gorm 一对多关系 表结构的建立

在创建的时候先将没有依赖的创建。表名称+ID就是外键。外键要和关联的外键的数据类型要保持一致。

2023-08-24 10:51:08 957

原创 Golang Gorm 高级查询之where + find

如果是零值,那么查询的时候就不会将零值作为查询带上了。其实就是sql语句当中的where。之前学的这种写法也是可以的。

2023-08-24 10:17:58 1421

原创 Golang GORM 单表删除数据 delete

删除只有一个操作,delete。也是先找到再去删除。可以删除单条记录,也可以删除多条记录。

2023-08-21 08:43:13 1778

原创 Golang gorm many2many查询

多对多就必须得加上many2many的tag。article_tags是用来指定第三张表,创建了一篇文章和两个tag,同时还会去创建其依赖关系。第三张表会自己去创建。多对多关系,需要用第三张表存储两张表的关系。关联已有文章就得先查。

2023-08-21 08:27:18 439

原创 Golang Gorm 更新字段 save、update、updates

更新和删除操作的前提条件都是要在找到数据的情况下,先要查询到数据才可以做操作。更新的前提的先查询到记录,Save保存所有字段,用于单个记录的全字段更新它会保控所有字段,即使零值也会保存。在更新和删除之前,要利用之前学的查询语句先查询到数据,再去更新,也就是使用find take先去查询所需要的记录,再去更新!

2023-08-19 08:54:01 5842

原创 Golang struct 结构体指针类型 / 结构体值类型

在代码执行的时候先执行.的操作,然后再执行*的操作。已经p.age取出具体的值了,那么对具体的值做*号处理肯定是错误的。这样使用肯定是不对的,因为.的运算优先级要高,所以先会去执行p2.age,之后又取地址,所以这个就不行。当需要通过变量去修改另外一个结构体内容的时候,可以通过传递地址的方式来达到这个效果。结构体变量之间的赋值是值拷贝。

2023-08-10 15:48:09 834

原创 Kubernetes Calico

如果每个主机上面都运行bird daemon,那么每一个主机之间,它们之间就变成了路由器的网络,它们会基于路由协议bgp,它们之间的协议会彼此交换路由信息,它们就会告知哪个网段应该跳转到我的主机上面来。calico的volume的path,所有插件的二进制文件是opt/cni/bin下面的,配置文件是/etc/cni/net.d下面的,也就是主机上面的两个目录通过hostpath形式mount到calico的initcontainer里面来了。网络策略是Calico最受欢迎的功能之一,

2023-08-09 15:27:18 746

原创 Vue 本地应用 记事本 v-on v-model v-for使用

获取用户输入的内容使用绑定v-model,双向数据绑定(可以将表单的内容和data当中的数据关联起来,可以非常方便的设置和取值)。这个指令的使用需要在data当中定义绑定的数据,接着将这个指令设置给相应的表单元素就可以了。使用的指令是v-for,同时要有一个可以生成列表的数据,常用的是数组。记事本里面的内容并不复杂,所以这里使用字符串数组就行了。根据数组生成列表的结构,获取用户输入的内容(其实就是使用v-model进行双向数据绑定)。回车的时候新增数据,事件绑定v-on,使用回车键那么就是enter。

2023-08-08 11:16:37 481

原创 Kuibernetes 如何根据不同业务场景调节 HPA 扩缩容灵敏度

比如数据处理管道的场景,扩容指标是队列中的事件数量, 当队列中堆积了大量事件时,我们希望可以快速扩容,但又不希望太灵敏,因为可能只是短时间内的事件堆积,即使不扩容也可以很快处理掉。如果流量高峰过了,并发量骤降,如果用默认的缩容策略,等几分钟后 Pod 数量也会随之骤降,如果 Pod 缩容后突然又来一个流量高峰,虽然可以快速扩容,但扩容的过程毕竟还是需要一定时间的,如果流量高峰足够高,默认的扩容算法会在较短的时间内扩容,针对这种场景我们可以给扩容增加一个时间窗口以避免毛刺导致扩容带来的资源浪费,

2023-08-06 20:06:19 418

原创 Kubernetes API Aggregation API聚合

API 聚合机制是 Kubernetes 1.7 版本引入的特性,能够将用户扩展的 API 注册到 kube-apiserver 上,仍然通过 API Server 的 HTTP URL 对新的 API 进行访问和操作。为了实现这个机制,Kubernetes 在 kube-apiserver 服务中引入了一个 API 聚合层(API Aggregation Layer),用于将扩展 API 的访问请求转发到用户服务的功能。设计 API 聚合机制的主要目标如下。

2023-08-06 19:58:09 781 1

原创 Kubernetes 集群calico网络故障排查思路

访问k8s的dashboard界面无法访问网站,查看pod,未知原因导致calico的Pod资源重新创建后无法启动,显示的是0/1状态。,这会导致一个网络异常的ip作为nodeIP被注册,从而影响node之间的网络连接。的策略,尝试连接某一个Ready的node的IP,以此选择出正确的IP。对应的value值。下载的官方提供的yaml文件中,ip识别策略。调整calicao的网络插件的网卡发现机制,修改。再次访问集群的各种资源已经可以访问了。Calico的Pod报错内容。

2023-08-06 19:17:09 2284

空空如也

空空如也

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

TA关注的人

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