golang之channel源码解析 type hchan struct { dataqsiz uint //缓冲槽大小 buf unsafe.Pointer//缓冲槽指针 sendx uint // 发送索引 recvx uint // 接受索引 recvq waitq // 接收队列 sendq waitq // 发送队列}异步和同步的区别,在于是............
MySql中“too many connections“错误 有时候在使用mysql过程中会出现"too many connections"的错误,顾名思义是因为连接数过多造成的,造成连接数过多的原因主要有:系统硬件等限制:根据官方说明,连接数受到线程库质量、RAM的可用性,响应时间,可用的文件描述符数量等影响,这种方式的解决方式为增加服务器或提高服务器的性能。连接的释放:这个很好理解,连接如果没有被正常释放,也可能导致连接数过多。最大连接数设置过低前面两种情况不做过多讲解,重点来讲一下如何合理的设置最大连接数。max_connections查看最大连
golang的json源码解析 golang序列化和反序列化在encoding/json包,主要方法为encoding/json.Marshal和encoding/json.Unmarshal,序列化和反序列化主要是通过反射来实现的。序列化一开始序列化会定义一个encodeState结构体,因为在序列化过程中可以理解为一种树形的解析方式,这个后面会讲,树形的方式常规的一种方式就是用递归的方式去实现,我们知道递归很容易引起性能问题,所以go源码里也做了缓存的优化,encodeState里用到了bytes.Buffer,正是在递归过程中不
golang的struct tag 格式type strutName struct{ fieldName type `key:"value,opt1,opt2,opts..." key2:"value2,opt1,opt2,opts..."`}结构体字段fieldName首字母必须是大写,在go中首字母大小写代表公私有属性tag都是以key:"value"的形式存在,多个键值对之间用空格隔开,这个的好处是可以构建多个json解析器举例说明多json解析器忽略空值omitempty表示在编码时如果字段为空,则忽略这
etcd网络层源码分析(一) etcdserver.NewServer//轻量级,用了不会关闭var err errort.streamRt, err = newStreamRoundTripper(t.TLSInfo, t.DialTimeout)if err != nil { return err}//对于大的数据pipeline,用了立刻关闭的入口t.pipelineRt, err = NewRoundTripper(t.TLSInfo, t.DialTimeout)if err != nil { retur
etcd配置文件 成员标志-name此成员的可读名称默认值:“default”环境变量:ETCD_NAME-data-dir数据目录的路径环境变量:ETCD_WAL_DIR–wal-dir专用wal目录的路径。如果设置了此标志,etcd会将WAL文件写入walDir而不是dataDir。这允许使用专用磁盘,并有助于避免日志记录和其他IO操作之间的io竞争。–snapshot-count触发快照到磁盘的已提交事务数默认值:“100000”环境变量:ETCD_SNAPSHOT_CO
etcd安装 github下载etcd$ git clone https://github.com/etcd-io/etcd.git$ cd etcd$chmod +x build$ ./build运行服务端cd /bin./etcd客户端cd /bin./etcdctl put foo bar./etcdctl get foo安装参考
etcd的v3基准测试 etcd自带基准测试基准测试在目录tool/benchmark,可以通过go install安装后运行测试# write to leaderbenchmark --endpoints=${HOST_1} --target-leader --conns=1 --clients=1 \ put --key-size=8 --sequential-keys --total=10000 --val-size=256benchmark --endpoints=${HOST_1} --target-lea
redis6.0源码整数集合 整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合键的底层实现。typedef struct intset { //编码方式 uint32_t encoding; //集合包含的元素数量 uint32_t length; //保存元素的数组 int8_t contents[];} intset;contents数组是整数集合的底层实现:整数集合的每个元素都是contents数组的一个数据项(i
Innodb锁讲解 概述上一章我们讲到,MyISAM和MEMORY存储引擎采用的是表级锁;BDB存储引擎采用的是页面锁,但也支持表级锁;InnoDB存储引擎即支持行级锁,也支持表级锁。行锁的共享锁和排它锁InnoDB实现了一下两种类型行锁:共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。排他锁(X): 允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享锁和排他锁。另外,为了允许行锁和表锁共存,实现多粒度机制,InnoDB还有两种内部使用的意向锁(Intention Locks)
ab压测 常用命令表示一次发送1000请求,并发请求100个$ ab -n 1000 -c 100 http://localhost:8030/buy/goodsThis is ApacheBench, Version 2.3 <$Revision: 1874286 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundati