使用 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/