戈朗 : Selecting DB on a RedisPool in Redigo

标签 go redis redigo

使用 redigo,我创建了一个池,类似这样:

&redis.Pool{
    MaxIdle:   80,
    MaxActive: 12000, // max number of connections
    Dial: func() (redis.Conn, error) {
        c, err := redis.Dial("tcp", host+":"+port)
        if err != nil {
            panic(err.Error())
        }
        return c, err
    }

我遇到的问题是,每次我获得新连接时,我都需要设置数据库,因为我在 VPS 上托管了多个站点,因此我使用了不同的 redis 数据库。

所以,像这样:

conn := pool.Get()
defer conn.Close()

conn.Do("SELECT", dbNumber)  //this is the call I want to avoid

每次我使用 redis 时都必须选择数据库,这似乎是多余的,而且还会带来问题,因为我将它用于 session ,即使用不是我的代码来处理我池中的 redis 连接,这使得设置“不可能”正确的数据库。

我想做的是为池设置 dbno,这样每当有人从池中请求新连接时,它就会附带已设置的正确数据库,即不会每次都显式设置。

您是如何在您的应用程序中解决这个问题的?

谢谢。

最佳答案

可以使用redis.DialOption:redis.DialDatabase, redis.DialPassword

conn, err := redis.Dial("tcp", "127.0.0.1:6379", redis.DialDatabase(1))
if err != nil {
    panic(err)
}
defer conn.Close()

关于戈朗 : Selecting DB on a RedisPool in Redigo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25708256/

相关文章:

indexing - 戈朗 : int to slice conversion

node.js - 用 nets 和 nodejs 堆叠字符串

Redis 查找匹配字符串的模式键

go - 如何在redis中通过通配符键获取所有值

go - HMGET : Empty result when passing params

windows - 如何在 Windows 上从命令提示符更新 golang?

templates - 模板不呈现任何内容,也没有错误,但是状态为200

pointers - golang 接口(interface)合规性编译类型检查

php - Laravel - 作业发送后如何获取 Redis 作业 ID?

go - 是否有任何自动增量机制用于使用 redigo 包装器将键值存储在 redis 中?