我正在使用以下代码从Go应用执行SET和EXPIRE。
_, err = C.Cache.Do("SETEX", key, 3600, data)
但我开始出现错误: 使用封闭的网络连接 。我使用Gary Burd的Redigo软件包和RedisLabs。
我连接到Redis的代码是:
//Connect to cache (Redis) cache, err := connectToCache() if err != nil { log.Printf("Cache connection settings are invalid") os.Exit(1) } defer cache.Close() func connectToCache() (redis.Conn, error) { cache, err := redis.Dial("tcp", CACHE_URI) if err != nil { return nil, err } _, err = cache.Do("AUTH", CACHE_AUTH) if err != nil { cache.Close() return nil, err } return cache, nil }
您可以使用redis.Pool来管理多个连接,检查空闲连接是否仍在运行,并自动获取新连接。您也可以在拨打新连接时自动执行AUTH步骤:
redis.Pool
func newPool(server, password string) *redis.Pool { return &redis.Pool{ MaxIdle: 3, IdleTimeout: 240 * time.Second, Dial: func () (redis.Conn, error) { c, err := redis.Dial("tcp", server) if err != nil { return nil, err } if _, err := c.Do("AUTH", password); err != nil { c.Close() return nil, err } return c, err }, TestOnBorrow: func(c redis.Conn, t time.Time) error { _, err := c.Do("PING") return err }, } } var ( pool *redis.Pool redisServer = flag.String("redisServer", ":6379", "") redisPassword = flag.String("redisPassword", "", "") ) func main() { flag.Parse() pool = newPool(*redisServer, *redisPassword) ... }