为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁花不似锦 2021-11-29 15:37:19
我正在使用以下代码从我的 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}
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您可以使用 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)

    ...

}


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信