缓存Github API响应以用于搜索/存储库

时间:2019-03-19 12:17:49

标签: ruby-on-rails caching pagination github-api

我想在Rails中编写一个Web应用程序以搜索Github存储库。由于查询Github API受到限制,因此我认为缓存响应是一个好主意。 该端点search/repositories?q=search_term以分页格式返回结果。所以,我不确定在这种情况下如何进行缓存?

1 个答案:

答案 0 :(得分:0)

有许多方法可以在高速缓存中连接分页,但是所有这些方法都需要对分页中的每个页面进行新的请求。

因此,让用户直觉成为主流。如果用户需要下一页,请给他们选择单击“下一页”的选项,并使其遵循Github提供的链接标题。缓存中的外观如何?由于它们在URL的末尾提供了方便的page=2参数,所以为什么不只使用用户请求的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%的人只是在寻找首页的响应怎么办?为什么要浪费所有这些空间?因此,通过分页,总是最容易让人选择是否需要更多数据。不要尝试预缓存可能永远不会使用的数据。