2012-10-17 37 views
6

我對一個Rails應用的Varnish和Rack-Cache的目的有點困惑。在config/environments/production.rb緩存可以像Rails應用程序的清漆和機架緩存的要點是什麼?

config.static_cache_control = "public, max-age=3600"

設置鑑於這種情況,究竟是什麼光油和機架緩存的目的,如果你可以設置在Rails的緩存應用程序本身?

什麼導致默認的Rails應用程序使用機架緩存?

回答

7

Static Cache Control會影響Cache-Control的http標頭。如在,服務器建議中間高速緩存的最大年齡= 3600。

Varnish,Rack-Cache,Squid等人主動在服務器上緩存生成的內容。數據庫調用非常昂貴,即使請求沒有調用數據庫,請求必須經歷的基礎架構越少,通常速度會越快。

Rack :: Cache是​​支持符合HTTP標準的緩存的機架中間件。他們的FAQ page有一些關於它優於其他緩存解決方案的優點和缺點。這是一個question comparing rack::cache to varnish on heroku。 Rails還具有處理片段和頁面緩存的ActiveSupport :: Cache。我不確定它們之間有什麼不同,但默認情況下都包含在Rails中。我之前曾說過rack :: cache不是默認的,但我錯了。

Varnish,Squid等存在於Web服務器前面的Rails堆棧之外(例如Apache/Nginx/etc)作爲單獨的進程。它們具有高度可配置性,獨立於應用程序,並具有一些高級功能(如Squid的ACL)。 Varnish和其他人可以最大限度地減少請求必須經過的基礎設施。如果它是新鮮的,請求會打上清漆並立即返回給客戶端。這對於高流量的網站來說可能是最有利的,而對於較小的應用程序來說可能是過度的。

這是關於heroku detailing the use of rack::cache in Rails3的文章。在頁面/片段緩存應用程序中以及將memcached用作後端(這非常重要)上也有一些很好的railscasts。對於清漆和其他,您可以從this tutorial on varnish's site開始。

+1

您所描述的內容聽起來像是服務器端緩存。 Rails本身不支持服務器端緩存嗎? – user782220

+0

我寫了這樣的答案深夜,並沒有說得很清楚。我會更新它。 Rails3有來自ActiveSupport :: Cache的緩存支持,所以我不確定rack :: cache是​​否是冗餘的。我會擴大使用清漆,只是給我一分鐘。 – GorrillaMcD

+0

我糾正了一些錯誤信息(對此感到抱歉)。 Rack :: cache和ActiveSupport :: cache都是rails的一部分。我不確定這些差異是什麼。 – GorrillaMcD