Golang Redis 連線池
阿新 • • 發佈:2020-12-09
Redis 連線池
說明:通過 Golang 對 Redis 進行操作,還可以通過使用 Redis 連線池,流程如下:
1)事先初始化一定數量的執行緒,放入到連線池。
2)當 Go 需要操作 Redis 時,直接從 Redis 連線池取出連結即可。
3)這樣可以節省臨時獲取 Redis 連結的時間,從而提高效率。
核心程式碼:
var pool *redis.Pool pool = &redis.Pool { MaxIdle:8, // 最大空閒連線處 MaxActive:0, // 表示和資料庫的最大連線數,0表示沒有限制 IdleTimeout:100, // 最大空閒時間,超過這個時間沒有執行緒使用該連線,會自動放回Maxldle Dial:func()(redis.Conn,err) { // 初始化連線池 return redis.Dial(“tcp”,”localhost:6379”) } } c := pool.Get() // 從連線池中取出一個連線 pool.Close() // 關閉連線池,一旦關閉連線池,就不能再從連線池中取出連線
為什麼需要使用 Redis 連線池?
傳統的方式:需要每次連線一次 Redis ,然後關閉,比較浪費資源。
連線池的概念:一上來就給程式分配一下可以用的資源。程式需要使用連線的時候,直接從連線池中取出連線。
完整例項程式碼:
/* Golang redis 連線池 */ package main import ( "fmt" "github.com/garyburd/redigo/redis" ) // 定義一個全域性變數 pool var pool *redis.Pool // 啟動程式時,就初始化連線池 func init() { pool = &redis.Pool{ MaxIdle: 8, // 最大空閒連線數 MaxActive: 0, // 表示和資料庫的最大連線,0表示沒有限制 IdleTimeout: 100, // 最大空閒時間 Dial: func() (redis.Conn, error) { return redis.Dial("tcp", "localhost:6379") }, } } func main() { // 先從 pool 取出一個連線 conn := pool.Get() defer conn.Close() _, err := conn.Do("Set", "name", "張zjune") if err != nil { fmt.Println("redis set err = ", err) return } result, err := redis.String(conn.Do("Get", "name")) if err != nil { fmt.Println("redis get err = ", err) return } fmt.Println(result) }
輸出的結果: