Redigo---Go版的Redis-client(二 链接池来处理链接)

之前一篇文章介绍过使用redigo连接redis数据库处理,在使用中发现如果初始化一条链接连接redis做相关操作,使用中发现当两个程序交替使用redis时,先前建立的链接会断掉,只能每次操作的时候重新建立链接,使用后关闭。后来发现redigo有一个连接池的功能,所以改用链接池处理

先介绍下链接池的结构

type Pool struct {
    //Dial 是创建链接的方法
    Dial func() (Conn, error)

    //TestOnBorrow 是一个测试链接可用性的方法
    TestOnBorrow func(c Conn, t time.Time) error

    // 最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态
    MaxIdle int

    // 最大的激活连接数,表示同时最多有N个连接 ,为0事表示没有限制
    MaxActive int

    //最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭
    IdleTimeout time.Duration

    // 当链接数达到最大后是否阻塞,如果不的话,达到最大后返回错误
    Wait bool

}

使用方法可以看下边的例子

package main

import (
    "flag"
    "fmt"
    "github.com/garyburd/redigo/redis"
    "time"
)
//声明一些全局变量
var (
    pool          *redis.Pool
    redisServer   = flag.String("redisServer", ":6379", "")
    redisPassword = flag.String("redisPassword", "123456", "")
)
//初始化一个pool
func newPool(server, password string) *redis.Pool {
    return &redis.Pool{
        MaxIdle:     3,
        MaxActive:   5,
        IdleTimeout: 240 * time.Second,
        Dial: func() (redis.Conn, error) {
            c, err := redis.Dial("tcp", server)
            if err != nil {
                return nil, err
            }
            if _, err := c.Do("AUTH", password); err != nil {
                c.Close()
                return nil, err
            }
            return c, err
        },
        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            if time.Since(t) < time.Minute {
                return nil
            }
            _, err := c.Do("PING")
            return err
        },
    }
}

func main() {
    flag.Parse()
    pool = newPool(*redisServer, *redisPassword)

    conn := pool.Get()
    defer conn.Close()
    //redis操作
    v, err := conn.Do("SET", "pool", "test")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(v)
    v, err = redis.String(conn.Do("GET", "pool"))
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(v)

}

方便使用也同样做了一个封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值