当咱们要进行redis操做或者其余中间件操做的时候,为了少发起服务端的链接,咱们会在main函数外先创建链接,以减小服务端的链接次数mysql
事实上,不少中间件的链接只是一个语法声明,其实并无进行真正的链接,好比下面的代码git
package main import ( "fmt" "github.com/garyburd/redigo/redis" "github.com/spf13/cast" "math/rand" "time" ) var ( rds, errxx = redis.Dial("tcp", "1.1.1.1:3333") ) func Do(i int) { fmt.Println("开始进行redis操做...") act, err := rds.Do("SET", "name" + cast.ToString(i), i) fmt.Println(act, "--------", err) } func main() { ticker := time.NewTicker(3 * time.Second) defer ticker.Stop() for { select { case <-ticker.C: Do(rand.Intn(1000)) } } }
事实上每个操做redis的时候,都会对redis从新发起一次链接,并无起到减小链接的做用github
运行上面的程序, 而后观察redis的数据写入, 在写入一些数据以后,咱们中止redis的服务,程序就会报错golang
use of closed network connection
可见即便是放在main函数外的中间件句柄, 也只是一个声明(redis, mysql等都是,其余还没测试),并无进行真正的链接,因此要减小发起链接的次数,仍是乖乖的用链接池吧。redis