一尘不染

Go会缓存DNS查找吗?

go

我正在构建一个测试爬网程序,并且想知道Go(golang)是否缓存DNS查询。我没有看到有关dnsclient中缓存的任何信息。添加到任何搜寻器以防止大量额外的DNS查询似乎很重要。

Go(1.4+)是否缓存DNS查找?

如果不是,那么debian / ubuntu / linux,windows或darwin / OSX是否可以在网络级别进行任何缓存?


阅读 402

收藏
2020-07-02

共1个答案

一尘不染

您的问题的答案是否定的。std
lib解析器中没有内置的dns缓存。这会有所帮助吗?也许在某些情况下。我们的组织在每台服务器上运行本地dns缓存,并将resolv.conf指向该服务器。因此,使用该语言进行缓存不一定会对我们有太大帮助。

有一些解决方案可以为您提供帮助。这个软件包似乎有一个很好的解决方案。从他们的自述文件中,您甚至可以执行以下操作:

http.DefaultClient.Transport = &http.Transport {
  MaxIdleConnsPerHost: 64,
  Dial: func(network string, address string) (net.Conn, error) {
    separator := strings.LastIndex(address, ":")
    ip, _ := dnscache.FetchString(address[:separator])
    return net.Dial("tcp", ip + address[separator:])
  },
}

为所有来自http.Get和朋友的http请求启用它。

2020-07-02