ruby-on-rails - 缓存搜索/存储库的 Github API 响应
问题描述
我想在 Rails 中编写一个 Web 应用程序来搜索 Github 存储库。由于查询 Github API 有限制,我认为缓存响应是个好主意。此端点search/repositories?q=search_term
以分页格式返回结果。那么,我不确定在这种情况下如何进行缓存?
解决方案
有很多方法可以在缓存中连接分页,但所有这些方法都需要对分页中的每个页面发出新请求。
所以,让用户的直觉统治。如果用户需要下一页,请让他们选择单击“下一页”,然后按照 Github 提供的链接标题进行操作。在你的缓存中看起来如何?page=2
由于它们在 URL 的末尾提供了一个方便的参数,为什么不直接使用用户请求的 URL 作为键,值是响应。
url = "api.github.com/search/resource?q=name:cool+name"
if(get(url)) return get(url)
response = get(url)
set(url, response)
return response
如果用户单击“下一页”,您应该发出此请求:
url = "api.github.com/search/resource?q=name:cool+name&page=2"
if(get(url)) return get(url)
response = get(url)
set(url, response)
return response
但是看看这个过程如何没有改变?如果它在缓存中,请发送它。如果不是,不要。
为什么我们不想递归地缓存所有页面?因为人类最清楚。计算机很乐意为每次搜索缓存 1,000,000 条响应。但是,如果 99.99% 的人只是在寻找首页的回复呢?为什么要浪费这么多空间?因此,通过分页,让人们选择是否需要更多数据总是最容易的。不要尝试预缓存可能永远不会使用的数据。
推荐阅读
- python - Neo 智能合约 boa.blockchain 模块
- r - Shiny Dashboard DT::renderDataTable..输出未渲染..卡在处理中...通过在选项中将其设为“FALSE”来修复它。还没有输出
- java - Swagger Codegen convert "format: time" to non String
- angular - 如何使用错误的凭据停止或退出量角器执行其他规范
- java - Hibernate 表未映射但表存在
- excel - 如何在 Excel 公式中使用 Excel 文本框中的输入值
- sql - Firebird 程序中的错误
- voltdb - VoltDB 支持 SELECT FOR UPDATE 吗?
- python - 带有 __aexit__ 的键盘中断
- makefile - openSUSE 15:无法使用 Makefile 进行链接