SETEX 错​​误 - “使用关闭的网络连接”

我正在使用以下代码从我的 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

}


繁花不似锦
浏览 120回答 1
1回答

手掌心

您可以使用 aredis.Pool来管理多个连接,检查空闲连接是否处于活动状态,并自动获取新连接。您还可以在拨打新连接时自动执行 AUTH 步骤: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)    ...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go