go-redis
Posted 苍山落暮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go-redis相关的知识,希望对你有一定的参考价值。
go-redis初始化
1.创建连接池
import "github.com/gomodule/redigo/redis"
var RedisPool *redis.Pool
func init() {
RedisPool = &redis.Pool{
MaxIdle: 5, // idle的列表长度, 空闲的线程数
MaxActive: 0, // 线程池的最大连接数, 0表示没有限制
Wait: true, // 当连接数已满,是否要阻塞等待获取连接。false表示不等待,直接返回错误。
IdleTimeout: 200 * time.Second, //最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭
Dial: func() (redis.Conn, error) { // 创建链接
c, err := redis.Dial("tcp", beego.AppConfig.String("redis_addr"))
if err != nil {
return nil, err
}
if _, err := c.Do("AUTH", beego.AppConfig.String("redis_password")); err != nil {
c.Close()
return nil, err
}
if _, err := c.Do("SELECT", beego.AppConfig.String("redis_index")); err != nil {
c.Close()
return nil, err
}
return c, nil
},
TestOnBorrow: func(c redis.Conn, t time.Time) error { //一个测试链接可用性
if time.Since(t) < time.Minute {
return nil
}
_, err := c.Do("PING")
return err
},
}
//fmt.Println("Redis init on port ", beego.AppConfig.String("redis_addr"))
}
2.RedisPool简单使用
// get
func GetKey(key string) (string, error) {
rds := RedisPool.Get()
defer rds.Close()
return redis.String(rds.Do("GET", key))
}
// set expires为0时,表示永久性存储
func SetKey(key, value interface{}, expires int) error {
rds := RedisPool.Get()
defer rds.Close()
if expires == 0 {
_, err := rds.Do("SET", key, value)
return err
} else {
_, err := rds.Do("SETEX", key, expires, value)
return err
}
}
以上是关于go-redis的主要内容,如果未能解决你的问题,请参考以下文章
golang常用库包:缓存redis操作库go-redis使用(03)-高级数据结构和其它特性