Go缓存DNS查找?

Xeo*_*oss 9 dns caching go

我正在构建一个测试爬虫,并想知道Go(golang)是否缓存DNS查询.我没有在dnsclient中看到有关缓存的任何信息.这似乎是添加到任何爬虫以防止大量额外DNS查询的重要事情.

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

如果没有,debian/ubuntu/linux,windows或darwin/OSX是否在网络级别进行任何缓存从中受益?

cap*_*aig 11

你的问题的答案是否定的.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:])
  },
}
Run Code Online (Sandbox Code Playgroud)

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

  • 另外,许多Linux现在包括本地DNS缓存,因此应用程序内的额外缓存没有太多好处。Ubuntu是一个明显的例子。您可以通过`dig www.google.com`看到实际的效果,其中显示了一些可能包含`;;的注释。服务器:127.0.1.1`,这是您正在运行的本地DNS缓存。 (2认同)

jch*_*jch 5

Go 解析器不进行任何进程内缓存。虽然您可以自己部署,但最好的选择可能是在每台计算机上运行系统范围的 DNS 缓存。(我最喜欢的是dnsmasq。)