【发布时间】:2011-05-22 12:08:06
【问题描述】:
我遇到了 API 限制请求,最终导致我的网站崩溃。
现在为了避免我在一个救援块中收到来自 Twitter gem 的推文请求,如果发生不好的事情会返回一个默认字符串。
我想知道缓存最新推文的最佳方法是什么:
@twitter = Twitter.user_timeline("some_user", :include_rts => 1, :count => 1).first
如果达到 API 限制?
【问题讨论】:
我遇到了 API 限制请求,最终导致我的网站崩溃。
现在为了避免我在一个救援块中收到来自 Twitter gem 的推文请求,如果发生不好的事情会返回一个默认字符串。
我想知道缓存最新推文的最佳方法是什么:
@twitter = Twitter.user_timeline("some_user", :include_rts => 1, :count => 1).first
如果达到 API 限制?
【问题讨论】:
我使用 memcache(或现在的 dalli)来处理类似的事情。有两种选择。您可以先命中缓存,如果时间戳在某个阈值内,则只需返回缓存值,而不会导致 API 命中。或者您可以使用 API,缓存该值,如果您超过 API 阈值,则在您的救援块中返回缓存的值。
require "memcache"
cache = MemCache.new...
...
@twitter = cache.get("some_user").first
if @twitter.nil?
begin
@twitter = Twitter.user_timeline...
cache.set("some_user", @twitter) if @twitter
rescue ...
@twitter = default
end
end
或
require "memcache"
cache = MemCache.new...
...
begin
@twitter = Twitter.user_timeline...
cache.set("some_user", @twitter) if @twitter
rescue...
@twitter = cache.get("some_user").first||default
end
那么你当然需要在服务器上运行 memcached 守护进程。
【讨论】: