【问题标题】:Simple way to cache twitter gem tweet in Sinatra?在 Sinatra 中缓存 twitter gem 推文的简单方法?
【发布时间】:2011-05-22 12:08:06
【问题描述】:

我遇到了 API 限制请求,最终导致我的网站崩溃。

现在为了避免我在一个救援块中收到来自 Twitter gem 的推文请求,如果发生不好的事情会返回一个默认字符串。

我想知道缓存最新推文的最佳方法是什么:

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

如果达到 API 限制?

【问题讨论】:

    标签: ruby twitter sinatra


    【解决方案1】:

    我使用 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 守护进程。

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多