繁体   English   中英

Go缓存DNS查找?

[英]Does Go cache DNS lookups?

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

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

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

你的问题的答案是否定的。 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请求启用它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM