在Sinatra中缓存twitter gem tweet的简单方法?
我遇到API限制请求,最终导致我的网站爆炸。
现在为了避免我在一个救援块中从Twitter gem获得推文请求,如果发生了不好的事情,它会返回一个默认字符串。
我想知道什么是最简单的缓存最新推文的方法:
@twitter = Twitter.user_timeline("some_user", :include_rts => 1, :count => 1).first
如果达到API限制?
我使用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守护程序。
- SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv2 / v3读取服务器hello A – Faraday :: Error :: ConnectionFailed
- Ruby on Rails before_filter vs ruby的初始化
- Ruby:如何检查哈希定义中是否存在变量
- Mandrill API模板
- 在ruby 2.0.0p247上安装ruby-debug-base时出错
- Jekyll错误“液体exception:nil的未定义方法`编码’:_layouts / post.html中的NilClass”
- ruby访问静态变量
- 我的应用无法从服务器加载一些图像
- CarrierWave在文件列保存NULL