为了账号安全,请及时绑定邮箱和手机立即绑定

Golang缓存HTTP GET结果在内存中

Golang缓存HTTP GET结果在内存中

Go
犯罪嫌疑人X 2021-04-09 18:15:52
我正在使用Go中的CLI进行抓取,该CLI会抓取网页以将页面上所有链接的href属性收集到一个切片中。我想将此切片存储在内存中一段时间,以免在每次执行CLI命令时都不调用刮板。理想情况下,只有在缓存过期或用户提供某种--update标志后才调用刮板。我遇到了库go-cache和其他类似的库,但是据我所知,它们仅适用于持续运行的内容,例如服务器。我曾考虑过将链接写入文件,但是在特定的持续时间之后如何使结果过期?在后台创建一个小型服务器以使用类似的库go-cache是否会有意义,这会在一段时间后关闭吗?任何帮助表示赞赏。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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

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

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

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

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


查看完整回答
反对 回复 2021-04-19
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信