猿问

Golang缓存HTTP GET结果在内存中

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

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

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


犯罪嫌疑人X
浏览 321回答 2
2回答

白衣染霜花

在这些情况下,有两种主要方法:创建充当数据存储库的守护程序,服务或后台应用程序。您可以根据需要将其作为HTTP服务器/ RPC服务器运行。然后,您的CLI应用程序将根据需要与此守护程序进行交互。实现一种持久性机制,该机制将允许在多个CLI应用程序执行之间写入和读取数据。您可以使用普通的文本文件,数据库,甚至可以使用golang的编码/对象的实现在二进制文件中读写切片(映射可能会更好)。您可以根据上面选择的策略/方法,通过显式删除条目或在后续执行期间不重写它们,来对条目进行时间戳记并在它们的ttl过期后简单地将其删除。这样一个开放式问题的示例范围和数量太多,无法在单个答案中发布,并且很可能需要多个特定问题。

ABOUTYOU

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

相关分类

Go
我要回答