当前位置: 首页 > 面试题库 >

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

汪安然
2023-03-14
问题内容

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

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)
    ...
}


 类似资料:
  • 我正在尝试从macos上使用swift开发的应用程序连接到realm object server 当我尝试连接时,会出现“网络连接丢失”错误,但我可以从浏览器中毫无问题地打开领域服务器。。顺便说一句,这个问题最近发生了,它在几周前工作正常 这里,用户总是,错误描述是 这发生在本地服务器和一个托管在数字海洋 服务器版本1.8。3. xcode控制台日志 2018-01-15 12:46:07.077

  • 问题内容: 我正在实现一个小型TCP服务器。我怎么知道我的一位客户是否关门?我应该只是尝试读取或写入并检查是否为零? 问题答案: 该线程“ 的最佳方式可靠地检测TCP连接被关闭 ”,使用了“ ”(也可见于或或许多其他情况下): 为了检测超时,建议: 更新2019:tuxedo25在评论中提到: 在Go 1.7+中,零字节读取立即返回,并且永远不会返回错误。 您必须读取至少一个字节。 参见commi

  • 我通过Spring Webflux框架使用Reactor Netty,以便将数据发送到远程内容交付网络。当客户端请求完成时,默认的反应器Netty行为是保持连接活动并将其释放回底层连接池。 一些内容交付网络建议在某些类型的状态代码(例如500个内部服务器错误)上重新解析DNS。为了实现这一点,我添加了一个自定义的Netty和,但我也需要关闭连接,否则它将被释放回池中,并且不会重新解析DNS。 如何

  • 我对AmazonEC2和Filezilla是完全陌生的。当我尝试连接到服务器时,收到一条错误消息:“错误:网络错误:连接被拒绝” 问题是,我无法获得关于如何将Filezilla与AmazonEC2结合使用的完整教程。我尝试按照本文中的步骤操作:使用Filezilla和SFTP连接到AmazonEC2文件目录,但它仍然不起作用。 到目前为止我所做的: 我在实例的安全组中添加以下端口: 菲利齐拉: 问

  • 我正在尝试从Eclipse运行一个动态web应用程序。我使用wildfly-10.0.0.final作为服务器。我安装了jboss工具。 作为测试,我创建了一个名为'test'的动态web项目,并在WebContent目录中添加了一个index.html文件,在p标记中添加了简单的“hi”。 http://localhost:8080/tester/index.html 页面加载失败,错误为:网络