Golang缓存HTTP GET结果在内存中

时间:2018-08-02 21:16:14

标签: go caching web-scraping

我正在使用Go中的CLI进行抓取,该CLI会抓取网页以将页面上所有链接的href属性收集到一个切片中。我想将此切片存储在内存中一段时间​​,以便在每次执行CLI命令时都不会调用刮板。理想情况下,仅在缓存过期或用户提供某种interesting标志之后才调用抓取工具。

我遇到了go-cache库和其他类似的库,但是据我所知,它们仅适用于持续运行的内容,例如服务器。

我考虑过将链接写入文件,但是在特定的持续时间之后如何使结果过期?在后台创建一个小型服务器以使用.to_array之类的库是否会有意义?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

在这些情况下,有两种主要方法:

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

  2. 实施一种持久性机制,该机制将允许在多个CLI应用程序执行之间写入和读取数据。您可以使用普通的文本文件,数据库,甚至可以使用golang的编码/对象的实现在二进制文件中读写切片(映射可能会更好)。

根据上面选择的策略/方法,您可以为条目加上时间戳,并通过明确删除它们或在随后的执行过程中不重写它们而在它们的ttl到期后简单地删除它们。

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

答案 1 :(得分:0)

使用数据库并存储尽可能多的详细信息(fetched_at,主机,路径,标题,meta_desc,锚点等)。您以后可以查询数据,将其以结构化格式使用将很有用。如果您不想处理db依赖关系,则可以嵌入boltdb(pure go)或sqlite(cgo)之类的东西。