我正在使用 Go 编写 CLI,它抓取网页以将页面上所有链接的 href 属性收集到一个片段中。我想将这个 slice 存储在内存中一段时间,这样就不会在每次执行 CLI 命令时都调用 scraper。理想情况下,只有在缓存过期或用户提供某种 --update
标志后才会调用 scraper。
我遇到了图书馆 go-cache和其他类似的库,但据我所知,它们只适用于持续运行的东西,比如服务器。
我考虑过将链接写入文件,但我如何在特定时间后使结果过期?为了使用像 go-cache
这样的库,在后台创建一个小型服务器并在一段时间后关闭是否有意义?感谢您的帮助。
最佳答案
在这些场景中有两种主要方法:
创建充当数据存储库的守护程序、服务或后台应用程序。您可以根据需要将其作为 HTTP 服务器/RPC 服务器运行。然后,您的 CLI 应用程序会根据需要与此守护进程交互;
实现持久性机制,允许跨多个 CLI 应用程序执行写入和读取数据。您可以使用普通的文本文件、数据库,甚至是 golang 编码/gob 的实现来将您的 slice ( map 可能会更好)写入二进制文件或从二进制文件读取。
根据上面选择的策略/方法,您可以为条目添加时间戳,并在它们的 ttl 过期后通过显式删除它们来简单地删除它们,或者在后续执行期间简单地不重写它们。
此类开放式问题的范围和示例数量太多,无法在单个答案中发布,很可能需要多个具体问题。
关于Golang 在内存中缓存 HTTP GET 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662272/