使用 explain 分析 SQL

使用 explain 分析 SQL

explain 显示了 MySQL 是如何使用索引来处理 select 语句和连接表。使用 explain 可以帮我们选择更好的索引和写出更优化的查询语句。

执行结果

一个 explain 语句执行的结果如下:

id

id 是 select 语句的标识符,没有什么意义,如果有子查询的话 explain 结果会有两条记录,id 分别是 1 和 2。这个序号代表了 sql 语句执行的顺序。

阅读全文 →

深入理解 Context

深入理解 Context

概览

Golang 的 context 包很多时候被用来处理 Goroutine 链的数据共享,退出等操作。

这里主要描述 Context 的使用示例和内部实现。

特性

  • Context 是并发安全的。

  • 支持树状的上级控制下级,不支持反向控制和平级控制。

阅读全文 →

Go 中的 nil

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
}

Slice

一个为 nil 的 slice,除了不被索引,其他操作都是可以的。

阅读全文 →

docker 使用

安装部署和常用命令

首先需要检查系统版本是否支持 Docker,现在新版本大部分已经支持了 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(现在很多镜像已经不可用了)。

阅读全文 →

Vm 使用技巧

打开最近的文件

:ol
# ol 指 old files

之后每个文件对应一个数字
然后使用 :e <数字> 打开这个文件

清除搜索的高亮

:nohl

替换换行

%s/foo/bar

foo 中换行符根据操作系统来确定,win: \r\n, mac: \r, linux: \n
bar 中换行符用 \r

阅读全文 →

SSH 配置

免密码登录

同时需要在多台 Linux 服务器上操作时,大量的 IP 和用户名密码经常记不住。
将本地的公钥文件拷贝到目标服务器的 ~/.ssh/authorized_keys 文件,文件不存在则新建一个。
或者使用 ssh-copy-id -i .ssh/id_rsa.pub root@x.x.x.x

阅读全文 →

申请 Let’s Encrypt 证书

申请 Let’s Encrypt 证书

这里使用 acme.sh 来配置证书

安装 acme.sh

curl https://get.acme.sh | sh

# 中国 https://github.com/acmesh-official/acme.sh/wiki/Install-in-China

安装在 ~/.acme.sh/ 目录下

切换 CA 服务器

acme.sh --set-default-ca --server letsencrypt

获取 dns api

生成证书需要验证域名的所有权,一般有 http 和 dns 两种验证方式,http 验证就是在网站根目录下放置文件,dns 则是添加 dns 记录来验证。
目前泛域名证书仅支持 dns 方式验证。
比如我使用的是 dnspod 来解析域名的,则去 dndpod 申请一套 api token,其他解析运营商也都类似。这样会得到一个 id 和 key。
然后设置为系统环境变量

阅读全文 →

命令 xargs

1 -d 分隔符

默认情况想 xargs 将其标准输入中的内容以空白(包括空格,Tab,回车等)分割成多个字符串。

-d 用来指定分隔符

$ echo '11@22@33' | xargs echo
11@22@33

$ echo '11@22@33' | xargs -d '@' echo
11 22 33

2 -p 输出命令

使用该选项之后xargs并不会马上执行其后面的命令,而是输出即将要执行的完整的命令(包括命令以及传递给命令的命令行参数),询问是否执行,输入 y 才继续执行,否则不执行。

阅读全文 →