Redis连接池的介绍和原理

Redis连接池

说明:通过Golang对Redis进行操作,还可以通过Redis连接池,流程如下
1)事先初始化一定数量的连接,放入连接池中;
2)当需要操作Redis时,直接从Redis连接池中取出连接即可;
3)这样可以节省临时获取Redis连接的时间,从而提高效率

核心代码

var pool *redis.Pool = &redis.Pool{
      MaxIdle: 8, // 最大空闲连接数
      MaxActive: 0, // 最大连接数,0表示没有限制
      IdleTimeout: 100, // 空闲超时时间
      Dial: func()(redis.Conn, error){ // 初始化连接
            return redis.Dial("tcp", "localhost:6379")
      },
}
c := pool.Get() // 从连接池中取出一个连接
pool.Close() // 关闭连接池,之后不能再取出连接

演示

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", "汤姆猫猫")
	if err!=nil{
		fmt.Println("conn do err:", err)
		return
	}
	// 取出
	res, err := redis.String(conn.Do("Get", "name"))
	if err!=nil{
		fmt.Println("conn get err:", err)
		return
	}
	fmt.Println("res =", res)
}

结果

posted @ 2021-02-16 15:05  pangqianjin  阅读(796)  评论(0编辑  收藏  举报