Простой способ кэшировать твит с драгоценным камнем Twitter в Sinatra?

#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 на сервере.