Go缓存DNS查找?

时间:2016-10-26 00:13:59

标签: caching go dns

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

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

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

2 个答案:

答案 0 :(得分:9)

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

有一些解决方案可以帮助您。 This package似乎有一个很好的解决方案。从他们自述的片段中你甚至可以做到:

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请求启用它。

答案 1 :(得分:2)

Go解析器不执行任何进程内缓存。虽然可以自己动手,但最好的办法是在每台机器上运行系统范围的DNS缓存。 (我最喜欢的是dnsmasq。)