我使用youtube_it gem使用youtube API。这个gem使用Faraday gem作为适配器,而不是直接使用Net::http。正如您所知,发出这样的远程请求至少需要几秒钟?现在,由于我无法直接访问Net::http库,我将如何在我的应用程序中实现缓存?以下是从youtube获取视频的示例请求。
#Authentication
$ @client = YouTubeIt::OAuth2Client.new(client_access_token: "access_token", client_refresh_token: "refresh_token", client_id: "client_id", client_secret: "client_secret", dev_key: "dev_key", expires_at: "expiration time")
#Request
@videos= @client.videos_by(:query => "penguin").videos #=>returns array of videos
您可能可以使用Memcache来实现这一点,键入查询和penguin的组合。你必须自己做更多的跑腿工作,但我发现,通常我最好自己写缓存,因为如果过早打开缓存,缓存会导致大量错误。
以下是您的代码可能执行的操作:
- 检查缓存中的@视频。通过访问令牌和查询的串联进行键控
- 如果缓存未命中,请执行提取并将结果存储在缓存中
- 如果缓存命中,则返回缓存中的内容。反序列化,并将其存储在@videos中
一个简单的问题是:您将@client作为实例变量是有原因的吗?您可能在控制器中执行此操作,而在视图中不需要此操作,因此作为一般原则,您应该限制视图可用内容的范围。