数据库优化有哪些?分别需要注意什么?
数据库设计
尽可能地使用最有效(最小)的数据类型
tinyint(1Byte)
smallint(2Byte)
mediumint(3Byte)
int(4Byte)
bigint(8Byte)
bad case:int(1)/int(11)
不要将数字存储为字符串,字符转化为数字,用int存储ip而非char(15)
优先使用enum或set,sex enum (‘F’, ‘M’)
避免使用NULL字段
NULL字段很难查询优化
NULL字段的索引需要额外空间
NULL字段的复合索引无效
bad case:`name` char(32) default
免密码登录配置
在需要免密钥登录其他机器的机器上生成ssh公钥,并复制到需要被登录的机器上
ssh-keygen
scp ~/.ssh/id_rsa.pub 目标机器用户名@目标机器ip:/home/目标机器用户名/
在目标机器处理,首先用目标用户登录机器
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys //ssh免密钥登录会检测文件的权限,过于开放和保守都不行~
chmod 700 ~/.ssh
设置 SSH,打开密钥登录功能(默认一般是开通的,不需要修改)
修改/etc/
golang中字符串格式化输出
package main
import (
"fmt"
"os"
)
type point struct {
x, y int
}
func main() {
// Go提供了几种打印格式,用来格式化一般的Go值,例如
// 下面的%v打印了一个point结构体的对象的值
p := point{1, 2}
fmt.Printf("%v\n", p)
// 如果所格式化的值是一个结构体对象,那么`%+v`的格式化输出
// 将包括结构体的成员名称和值
fmt.Printf("%
自增和自减
golang里包含其他语言常用的自增i++ 和自减i--,但是在golang里他们是语句而不是表达式,所以j=i++这种是错误的写法,而且golang也不支持++和--放在变量前面如++i的形式。
i++ // i的值+1
i-- // i的值-1
++i //错误
--i // 错误
j = i-- //错误
短变量声明只能在函数内部不能再外部
s := "" //错误
func main() {
s := ""
prinltln(s)
}
new只是一个预定义的函数,它并不是一个关键字
func delta(old, new int) int { return
三个工具介绍
go fmt是用来规范go文件格式,比如格式化单个文件 go fmt xxx.go
goimports 用来检查导入包,导入依赖包,删除不依赖的包
gometalinter 集成go语言几乎所有检测工具,静态分析代码,包含功能如下
go vet -工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前return的逻辑,struct的tag是否符合标准等。
go tool vet --shadow -用来检查作用域里面设置的局部变量名和全局变量名设置一样导致全局变量设置无效的问题
gotype -类型检测用来检测传递过来的变量和预期变量类型一致
gotype -x
入门docker书籍推荐:docker-从入门到实践
查看image、container、volume占用的空间大小
docker system df
image
image本地导入
docker import - [name] < /path/to/image/file
例如导入/tmp/test.export.tar并命名image名为demo
docker import - demo < /tmp/test.export.tar
image重命名
docker tag oldname:oldversion newname:newversion
docker image rm
目的
不关闭现在的链接
启用新的代码并处理新的请求
中间不能出现拒绝服务
流程
替换可执行程序
发送 SIGUSR2 信号
停止老进程继续接受新请求,并在处理完已有请求后停止
启动新的进程并接受新请求
实现
我根据上面要求写了一个简单的库gracefulServer,可以参考下
比如以gin为例使用该库实现优雅重启,代码如下:
package main
import (
"github.com/gin-gonic/gin"
"time"
"net/http"
"github.com/yushuailiu/gracefulServer"
)
func
package main
import (
"sync"
"fmt"
"time"
)
func main() {
var wg sync.WaitGroup
ch := make(chan int)
goroutineNum := 2
for i := 0; i < goroutineNum; i ++ {
wg.Add(1)
go doSomeThing(i, ch, &wg)
}
for j := 0; j < goroutineNum; j ++
Centos docker-ce安装
一般安装步骤
安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
修改软件源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 切回官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/
shadowsocks 使用的 sockets5 代理,而一般只有浏览器支持,所以使用 shadowsocks 可以实现科学上网,但是其他的应用却仍无法科学上网,所以要想实现全局科学上网需要 Proxifier 支持。
Proxifier介绍
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持 64位系统,支持Xp,Vista,Win7,MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好。有点类