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)
}
|