Простой способ кэшировать твит-твит в Синатре? - PullRequest
1 голос
/ 09 декабря 2010

Я сталкиваюсь с API Limit Requests, которые в конечном итоге взрывают мой сайт.

Прямо сейчас, чтобы не получать твит-запрос от драгоценного камня Twitter в блоке восстановления, который возвращает строку по умолчанию, если что-топлохое случается.

Мне интересно, что было бы лучшим способом кэшировать последний твит, просто используя:

  @twitter = Twitter.user_timeline("some_user", :include_rts => 1, :count => 1).first

В случае достижения ограничения API?

1 Ответ

2 голосов
/ 09 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...