1. 程式人生 > 其它 >Golang Redis 連線池

Golang Redis 連線池

技術標籤:Go語言goredisgolang

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)

}

輸出的結果: