在Sinatra中缓存twitter gem tweet的简单方法?

我遇到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守护程序。