首页 > 解决方案 > 缓存搜索/存储库的 Github API 响应

问题描述

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

标签: ruby-on-railscachingpaginationgithub-api

解决方案


有很多方法可以在缓存中连接分页,但所有这些方法都需要对分页中的每个页面发出新请求。

所以,让用户的直觉统治。如果用户需要下一页,请让他们选择单击“下一页”,然后按照 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% 的人只是在寻找首页的回复呢?为什么要浪费这么多空间?因此,通过分页,让人们选择是否需要更多数据总是最容易的。不要尝试预缓存可能永远不会使用的数据。


推荐阅读