我正在使用Go中的CLI进行抓取,该CLI会抓取网页以将页面上所有链接的href属性收集到一个切片中。我想将此切片存储在内存中一段时间,以免在每次执行CLI命令时都不调用刮板。理想情况下,只有在缓存过期或用户提供某种--update标志后才调用刮板。我遇到了库go-cache和其他类似的库,但是据我所知,它们仅适用于持续运行的内容,例如服务器。我曾考虑过将链接写入文件,但是在特定的持续时间之后如何使结果过期?在后台创建一个小型服务器以使用类似的库go-cache是否会有意义,这会在一段时间后关闭吗?任何帮助表示赞赏。
2 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
在这些情况下,有两种主要方法:
创建充当数据存储库的守护程序,服务或后台应用程序。您可以根据需要将其作为HTTP服务器/ RPC服务器运行。然后,您的CLI应用程序将根据需要与此守护程序进行交互。
实现一种持久性机制,该机制将允许在多个CLI应用程序执行之间写入和读取数据。您可以使用普通的文本文件,数据库,甚至可以使用golang的编码/对象的实现在二进制文件中读写切片(映射可能会更好)。
您可以根据上面选择的策略/方法,通过显式删除条目或在后续执行期间不重写它们,来对条目进行时间戳记并在它们的ttl过期后简单地将其删除。
这样一个开放式问题的示例范围和数量太多,无法在单个答案中发布,并且很可能需要多个特定问题。
ABOUTYOU
TA贡献1812条经验 获得超5个赞
使用数据库并存储尽可能多的详细信息(fetched_at,主机,路径,标题,meta_desc,锚点等)。您以后可以查询数据,将其以结构化格式使用将很有用。如果您不想处理db依赖关系,则可以嵌入boltdb(pure go)或sqlite(cgo)之类的东西。
- 2 回答
- 0 关注
- 320 浏览
添加回答
举报
0/150
提交
取消