redis连接池

Go Redis连接池

官方包 https://github.com/gomodule/redigo

1、创建配置文件

存放在conf配置文件夹,可以跟你的需要存在相应。

redis.go

1
2
3
4
5
6
7
8
package conf

var RedisConf = map[string]string{
"name": "redis",
"type": "tcp",
"address": "127.0.0.1:6379",
"auth": "123456",
}

2、redis连接池

redispool.go 连接池实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package redis

import (
. "example/example/conf" //改成你自己配置目录
"github.com/garyburd/redigo/redis"
"time"
)

var RedisClient *redis.Pool

func init() {
// 建立连接池
RedisClient = &redis.Pool{
// 从配置文件获取maxidle以及maxactive,取不到则用后面的默认值
MaxIdle: 16, //最初的连接数量
// MaxActive:1000000, //最大连接数量
MaxActive: 0, //连接池最大连接数量,不确定可以用0(0表示自动定义),按需分配
IdleTimeout: 300 * time.Second, //连接关闭时间 300秒 (300秒不使用自动关闭)
Dial: func() (redis.Conn, error) { //要连接的redis数据库
c, err := redis.Dial(RedisConf["type"], RedisConf["address"])
if err != nil {
return nil, err
}
if _, err := c.Do("AUTH", RedisConf["auth"]); err != nil {
_=c.Close()
return nil, err
}
return c, nil
},
}
}

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import (
"example/example/public/redispool" //改成你自己的redispool.go(redis连接池实现文件)的目录
"fmt"
"github.com/gomodule/redigo/redis"
)

var RedisExpire = 3600 //缓存有效期
func main() {

// 从池里获取连接
rc := redispool.RedisClient.Get()
// 用完后将连接放回连接池
defer rc.Close()
key := "redis.cache"
_, err := rc.Do("Set", key, "1", "EX", RedisExpire)
if err != nil {
fmt.Println(err)
return
}
val, err := redis.String(rc.Do("Get", key))
if err != nil {
fmt.Println(err)
}
fmt.Println(val)
//删除
rc.Do("Del", key)

}