Я использую 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 на сервере.