#ruby #twitter #sinatra
#ruby #Twitter #sinatra
Вопрос:
Я сталкиваюсь с ограничивающими запросами API, которые в конечном итоге взрывают мой сайт.
Прямо сейчас, чтобы избежать этого, у меня есть запрос tweet от драгоценного камня Twitter в блоке rescue, который возвращает строку по умолчанию, если происходит что-то плохое.
Мне интересно, какой наилучший способ кэшировать последний твит, просто используя:
@twitter = Twitter.user_timeline("some_user", :include_rts =&&t; 1, :count =&&t; 1).first
В случае превышения предела API?
Ответ №1:
Я использую memcache (или теперь dalli) для подобных вещей. Есть два варианта. Вы могли бы сначала запустить кэш, и если временная метка находится в пределах определенного порога, просто вернуть кэшированное значение без обращения к API. Или вы могли бы использовать API, кэшировать значение и в своем блоке rescue возвращать кэшированное значение, если вы превысите пороговое значение API.
require "memcache"
cache = MemCache.new...
...
@twitter = cache.&et("some_user").first
if @twitter.nil?
be&in
@twitter = Twitter.user_timeline...
cache.set("some_user", @twitter) if @twitter
rescue ...
@twitter = default
end
end
или
require "memcache"
cache = MemCache.new...
...
be&in
@twitter = Twitter.user_timeline...
cache.set("some_user", @twitter) if @twitter
rescue...
@twitter = cache.&et("some_user").first||default
end
Тогда, конечно, вам нужно будет запустить демон memcached на сервере.