Golang 在内存中缓存 HTTP GET 结果

标签 go caching web-scraping

我正在使用 Go 编写 CLI,它抓取网页以将页面上所有链接的 href 属性收集到一个片段中。我想将这个 slice 存储在内存中一段时间​​,这样就不会在每次执行 CLI 命令时都调用 scraper。理想情况下,只有在缓存过期或用户提供某种 --update 标志后才会调用 scraper。

我遇到了图书馆 go-cache和其他类似的库,但据我所知,它们只适用于持续运行的东西,比如服务器。

我考虑过将链接写入文件,但我如何在特定时间后使结果过期?为了使用像 go-cache 这样的库,在后台创建一个小型服务器并在一段时间后关闭是否有意义?感谢您的帮助。

最佳答案

在这些场景中有两种主要方法:

  1. 创建充当数据存储库的守护程序、服务或后台应用程序。您可以根据需要将其作为 HTTP 服务器/RPC 服务器运行。然后,您的 CLI 应用程序会根据需要与此守护进程交互;

  2. 实现持久性机制,允许跨多个 CLI 应用程序执行写入和读取数据。您可以使用普通的文本文件、数据库,甚至是 golang 编码/gob 的实现来将您的 slice ( map 可能会更好)写入二进制文件或从二进制文件读取。

根据上面选择的策略/方法,您可以为条目添加时间戳,并在它们的 ttl 过期后通过显式删除它们来简单地删除它们,或者在后续执行期间简单地不重写它们。

此类开放式问题的范围和示例数量太多,无法在单个答案中发布,很可能需要多个具体问题。

关于Golang 在内存中缓存 HTTP GET 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662272/

相关文章:

go - 在 Gorilla/Mux 中反转子路由器

caching - X-Cache和X-Cache-Remote Akamai header 之间的区别

python - 无法解析包含表格数据(iframe)的网站中的元素

r - 如何 clickElement() 并在同一选项卡中打开链接,而不是在新窗口中?

javascript - 如何使用 PhantomJS 抓取嵌入的 JSON

interface - 如何在 Go 中声明复合接口(interface)?

http - Google App Engine Go HTTP Post []字节

Go Struct 中的 Go Protobuf 声明和可选字段(字符串指针)

java - 如何缓存同一类的其他方法?

JavaScript:从 GitHub 链接还是链接到本地​​文件?