2012-07-03 51 views
4

我有一個RoR 3.2.3的網站。它調用flickr.com的Web服務來獲取我的照片列表。但這並不重要。Ruby on Rails - 如何緩存API服務響應的結果?

底線是,它每次都會發出請求 - 每次訪問者訪問我的網站時,都會調用flickr.com的Web服務來獲取照片列表。顯然我想緩存大約5小時的flickr。就我而言,這足夠了。

所以,我該怎麼辦呢?什麼是最好的或最好的方式或只是一般的方法?也許你有一個鏈接如何做到這一點?

P.S.我用的heroku.com有5MB的支持PostgreSQL數據庫免關稅計劃。但是,如果有必要,我可以遷移到其他託管商。

回答

13

Memcached是開始一個不錯的選擇。 Heroku有it built-in for free(5mb)。設置指南可以發現here

$ heroku addons:add memcache 
$ vim Gemfile 
    gem 'dalli' 
$ vim config/environments/production.rb 
    config.cache_store = :dalli_store 
$ heroku console 
    Rails.cache.stats 

然後你可以用你的昂貴的API請求轉換成Rails.cache塊,請參見下面的代碼:

class Flickr 
    def self.cached_request 
    Rails.cache.fetch "photos", :expires_in => 5.minutes do 
     flickr.photos.getRecent 
    end 
    end 
end 

然後獲得使用緩存,只需要運行

Flickr.cached_request 

將火API請求,並緩存5分鐘。

+0

看起來非常有用。非常感謝你。 – Alexandre

+1

@AlexMaslakov歡迎您,如果有幫助,您可以將其標記爲已接受 – Anatoly

+0

不完全。你建議我使用5分鐘的到期時間嗎?我打算用5-10個小時來做​​這個,會不會很好?只是你的意見。 – Alexandre