我正在构建一个测试爬网程序,并且想知道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请求启用它。
http.Get