淺析Python的Django架構中的Memcached

來源:互聯網
上載者:User
動態網站的問題就在於它是動態。 也就是說每次使用者訪問一個頁面,伺服器要執行資料庫查詢,啟動模板,執行商務邏輯以及最終產生一個你所看到的網頁,這一切都是動態即時產生的。 從處理器資源的角度來看,這是比較昂貴的。

對於大多數網路應用來說,過載並不是大問題。 因為大多數網路應用並不是washingtonpost.com或Slashdot;它們通常是很小很簡單,或者是中等規模的網站,只有很少的流量。 但是對於中等至大規模流量的網站來說,儘可能地解決過載問題是非常必要的。

這就需要用到緩衝了。

緩衝的目的是為了避免重複計算,特別是對一些比較耗時間、資源的計算。 下面的虛擬碼示範了如何對動態網頁面的結果進行緩衝。

given a URL, try finding that page in the cacheif the page is in the cache:  return the cached pageelse:  generate the page  save the generated page in the cache (for next time)  return the generated page

為此,Django提供了一個穩定的緩衝系統讓你緩衝動態網頁面的結果,這樣在接下來有相同的請求就可以直接使用緩衝中的資料,避免不必要的重複計算。 另外Django還提供了不同粒度資料的緩衝,例如: 你可以緩衝整個頁面,也可以緩衝某個部分,甚至緩衝整個網站。

Django也和”上遊”緩衝工作的很好,例如Squid(http://www.squid-cache.org)和基於瀏覽器的緩衝。 這些類型的緩衝你不直接控制,但是你可以提供關於你的網站哪部分應該被緩衝和怎樣緩衝的線索(通過HTTP頭部)給它們
設定緩衝

緩衝系統需要一些少量的設定工作。 也就是說,你必須告訴它緩衝的資料應該放在哪裡,在資料庫中,在檔案系統,或直接在記憶體中。 這是一個重要的決定,影響您的快取的效能,是的,有些類型的緩衝比其它類型快。

緩衝設定在settings檔案的 CACHE_BACKEND中。 這裡是一個CACHE_BACKEND所有可用值的解釋。
記憶體緩衝

Memcached是迄今為止可用於Django的最快,最有效緩衝類型,Memcached是完全基於記憶體的緩衝架構,最初開發它是用以處理高負荷的LiveJournal.com隨後由Danga Interactive公司開源。 它被用於一些網站,例如Facebook和維基百科網站,以減少資料庫訪問,並大幅提高網站的效能。

Memcached是免費的(http://danga.com/memcached)。它作為一個守護進程運行,並分配了特定數量的記憶體。 它只是提供了添加,檢索和刪除緩衝中的任意資料的高速介面。 所有資料都直接儲存在記憶體中,所以沒有對使用的資料庫或檔案系統的開銷。

在安裝了Memcached本身之後,你將需要安裝Memcached Python綁定,它沒有直接和Django綁定。 這兩個可用版本。 選擇和安裝以下模組之一:

最快的可用選項是一個模組,稱為cmemcache,在http://gijsbert.org/cmemcache。

如果您無法安裝cmemcache,您可以安裝python - Memcached,在ftp://ftp.tummy.com/pub/python-memcached/。如果該網址已不再有效,只要到Memcached的網站http://www.danga.com/memcached/),並從用戶端API完成Python綁定。

若要使用Memcached的Django,設定CACHE_BACKEND到memcached:/ / IP:port/,其中IP是Memcached的守護進程的IP地址,port是Memcached啟動並執行連接埠。

在這個例子中,Memcached運行在本地主機 (127.0.0.1)上,連接埠為11211:

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

Memcached的一個極好的特性是它在多個伺服器間分享緩衝的能力。 這意味著您可以在多台機器上運行Memcached的守護進程,該程式會把這些機器當成一個單一緩衝,而無需重複每台機器上的緩衝值。 要充分利用此功能,請在CACHE_BACKEND裡引入所有伺服器的地址,用分號分隔。

這個例子中,緩衝在運行在IP地址為172.19.26.240和172.19.26.242,連接埠號碼為11211的Memcached執行個體間分享:

CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'

這個例子中,緩衝在運行在172.19.26.240(連接埠11211),172.19.26.242(連接埠11212),172.19.26.244(連接埠11213)的Memcached執行個體間分享:

CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/'

最後有關Memcached的一點是,基於記憶體的緩衝有一個重大的缺點。 由於緩衝的資料存放區在記憶體中,所以如果您的伺服器崩潰,資料將會消失。 顯然,記憶體不是用來持久化資料的,因此不要把基於記憶體的緩衝作為您唯一的儲存資料緩衝。 毫無疑問,在Django的緩衝後端不應該用於持久化,它們本來就被設計成緩衝的解決方案。但我們仍然指出此點,這裡是因為基於記憶體的緩衝是暫時的。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.