什么是连接池?
连接池是一种管理数据库连接的技术。在传统的数据库连接方式中,每次需要与数据库建立连接时都会创建一个新的连接,完成操作后再销毁该连接。这种方式在高并发场景下效率较低,因为连接的创建和销毁需要消耗较多的资源和时间。
假设高性能服务器端处理redis操作需要1ms,通信建立和释放就需要39ms,显然这限制了redis的性能
连接池解决了这个问题,它在应用程序启动时预先创建一定数量的连接,并将这些连接保存在连接池中。应用程序需要连接时,直接从连接池中获取一个连接进行数据库操作;操作完成后,将连接归还给连接池,而不是销毁该连接。这样可以减少连接的创建和销毁次数,提高数据库操作效率。
package main
import (
"fmt"
"github.com/gomodule/redigo/redis"
"time"
)
var rds redis.Conn
func RedisPollInit() *redis.Pool {
return &redis.Pool{
MaxIdle: 5, //最大空闲数
MaxActive: 0, //最大连接数,0不设上
Wait: true,
IdleTimeout: time.Duration(1) * time.Second, //空闲等待时间
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", "127.0.0.1:6379") //redis IP地址
if err != nil {
fmt.Println(err)
return nil, err
}
return c, err
},
}
}
func RedisInit() {
rds = RedisPollInit().Get()
}
func RedisClose() {
_ = rds.Close()
}