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的主要内容,如果未能解决你的问题,请参考以下文章

go-redis

go-redis cluster 使用demo

golang常用库包:缓存redis操作库go-redis使用(03)-高级数据结构和其它特性

go-redis 连接池实现思想

go-redis 基于beego正确使用序列化存储数据和反序列化获取数据

如何从golang go-redis中的redis.Cmder获取价值?