Redigo--用池管理redis連線
阿新 • • 發佈:2019-02-11
在golang的專案中,若要頻繁的用redis(或者其他類似的NoSQL)來存取資料,最好用redigo自帶的池來管理連線。
不然的話,每當要操作redis時,建立連線,用完後再關閉,會導致大量的連線處於TIME_WAIT狀態(redis連線本質上就是tcp)。
注:TIME_WAIT,也叫TCP半連線狀態,會繼續佔用本地埠。
以下為redis連線池的golang實現:
其中,各引數的解釋如下:import ( "github.com/garyburd/redigo/redis" "github.com/astaxie/beego" "time" ) var ( // 定義常量 RedisClient *redis.Pool REDIS_HOST string REDIS_DB int ) func init() { // 從配置檔案獲取redis的ip以及db REDIS_HOST = beego.AppConfig.String("redis.host") REDIS_DB, _ = beego.AppConfig.Int("redis.db") // 建立連線池 RedisClient = &redis.Pool{ // 從配置檔案獲取maxidle以及maxactive,取不到則用後面的預設值 MaxIdle: beego.AppConfig.DefaultInt("redis.maxidle", 1), MaxActive: beego.AppConfig.DefaultInt("redis.maxactive", 10), IdleTimeout: 180 * time.Second, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", REDIS_HOST) if err != nil { return nil, err } // 選擇db c.Do("SELECT", REDIS_DB) return c, nil }, } }
MaxIdle:最大的空閒連線數,表示即使沒有redis連線時依然可以保持N個空閒的連線,而不被清除,隨時處於待命狀態。
MaxActive:最大的啟用連線數,表示同時最多有N個連線
IdleTimeout:最大的空閒連線等待時間,超過此時間後,空閒連線將被關閉
Dial:建立連線
使用連線池時的程式碼:
// 從池裡獲取連線
rc := RedisClient.Get()
// 用完後將連線放回連線池
defer rc.Close()
以上就是連線池的用法了,很簡單吧。