使用 explain 分析 SQL
explain 显示了 MySQL 是如何使用索引来处理 select 语句和连接表。使用 explain 可以帮我们选择更好的索引和写出更优化的查询语句。
执行结果
一个 explain 语句执行的结果如下:
id
id 是 select 语句的标识符,没有什么意义,如果有子查询的话 explain 结果会有两条记录,id 分别是 1 和 2。这个序号代表了 sql 语句执行的顺序。
explain 显示了 MySQL 是如何使用索引来处理 select 语句和连接表。使用 explain 可以帮我们选择更好的索引和写出更优化的查询语句。
一个 explain 语句执行的结果如下:
id 是 select 语句的标识符,没有什么意义,如果有子查询的话 explain 结果会有两条记录,id 分别是 1 和 2。这个序号代表了 sql 语句执行的顺序。
Golang 的 context 包很多时候被用来处理 Goroutine 链的数据共享,退出等操作。
这里主要描述 Context 的使用示例和内部实现。
Context 是并发安全的。
支持树状的上级控制下级,不支持反向控制和平级控制。
Go 中的 nil 表示一个类型的零值,nil 不是关键字。
如果一个方法的接收者类型是指针,即使这个对象的值是 nil,指针的方法也可以正常执行。
type person struct{}
func (p *person) Say() {
fmt.Println("hello")
}
func (p person) Say1() {
fmt.Println("hello1")
}
func main() {
var p *person
fmt.Println("p: ", p)
p.Say() // hello
p.Say1() // panic
}
一个为 nil 的 slice,除了不被索引,其他操作都是可以的。
首先需要检查系统版本是否支持 Docker,现在新版本大部分已经支持了 Docker。
yum install docker -y
systemctl start docker
# 官方安装命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
docker search centos
默认从国外拉取,速度比较慢,可以使用大陆的镜像加速,参考 https://docker-cn.com/registry-mirror(现在很多镜像已经不可用了)。
:ol
# ol 指 old files
之后每个文件对应一个数字
然后使用 :e <数字>
打开这个文件
:nohl
%s/foo/bar
foo 中换行符根据操作系统来确定,win: \r\n, mac: \r, linux: \n
bar 中换行符用 \r
同时需要在多台 Linux 服务器上操作时,大量的 IP 和用户名密码经常记不住。
将本地的公钥文件拷贝到目标服务器的 ~/.ssh/authorized_keys 文件,文件不存在则新建一个。
或者使用 ssh-copy-id -i .ssh/id_rsa.pub root@x.x.x.x
这里使用 acme.sh 来配置证书
curl https://get.acme.sh | sh
# 中国 https://github.com/acmesh-official/acme.sh/wiki/Install-in-China
安装在 ~/.acme.sh/
目录下
acme.sh --set-default-ca --server letsencrypt
生成证书需要验证域名的所有权,一般有 http 和 dns 两种验证方式,http 验证就是在网站根目录下放置文件,dns 则是添加 dns 记录来验证。
目前泛域名证书仅支持 dns 方式验证。
比如我使用的是 dnspod 来解析域名的,则去 dndpod 申请一套 api token,其他解析运营商也都类似。这样会得到一个 id 和 key。
然后设置为系统环境变量
默认情况想 xargs 将其标准输入中的内容以空白(包括空格,Tab,回车等)分割成多个字符串。
-d 用来指定分隔符
$ echo '11@22@33' | xargs echo
11@22@33
$ echo '11@22@33' | xargs -d '@' echo
11 22 33
使用该选项之后xargs并不会马上执行其后面的命令,而是输出即将要执行的完整的命令(包括命令以及传递给命令的命令行参数),询问是否执行,输入 y 才继续执行,否则不执行。