動態網站的問題在於它是動態的,也就是說每次用戶訪問呢,服務器都要執行數據庫查詢,啓動模板,執行業務邏輯以及最終看到你想看到的一個頁面,這一切都是動態python
生成的,也是比較昂貴的。數據庫
緩存的目的是爲了不重複計算,特別是一些比較耗時間,資源的。Django提供了不一樣粒度數據的緩存,你能夠緩存整個頁面,也能夠緩存某個部分,甚至整個網站。apache
設定緩存django
緩存系統須要一些少許的設定工做,也就是說,你必須告訴他緩存的數據應該放到哪裏,在數據庫中,在文件系統,後者是直接在內存中,這個是一個重要的決定,影響您的告訴緩存的性能windows
是的,有些類型的緩存比其餘類型快。後端
緩存設置在settings文件的CACHE_BACKEND中,這裏是一個CACHE——BACKEND全部可用值的解釋。緩存
內存緩存安全
memcached是迄今爲止能夠用於Django中的最快,最有效的緩存類型,Memcached是徹底基於內存的緩存框架,最初開發它是用以處理高負荷的livejournal.com隨後是Django Inbteractive公司開源。它被用於一些站點,例如facebook和維基百科網站,以減小數據庫訪問,而且大幅提升網站的性能。服務器
Memcached是免費的的,他做爲一個守護進程的運行,並分配了特定數量的內存,他只是提供了添加,檢索和刪除緩存中的任意數據的高速接口。全部數據都是直接存儲在內存中,因此沒有-對使用的數據庫或者文件系統的開銷。框架
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
Memcached的一個極好的特性是他在多個服務器分享緩存的能力,這意味着您能夠在多臺機器上運行Memcache的守護進程,該程序會把這些機器當成一個單一緩存,而無需重複在每臺機器上運行緩存值,要充分利用此功能,請在CACHE_BACKEND裏面引入全部服務器的地址,用分號分隔。
最後有關Memcached的一點是,基於內存的緩存有一個重大的缺點,因爲緩存的數據存儲在內存中,因此若是您的服務器崩潰,數據將會消失,顯然,內存不是用來持久化數據的,所以不要基於內存的緩存做爲您惟一的存儲數據的緩存,毫無疑問,在Django的緩存後端不該該用於持久化,他們原本被設計成緩存的解決方案,可是咱們任然指出此點,這裏是由於基於內存的緩存知識暫時的。
CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'
數據庫緩存
爲了使用數據庫緩存後端,首先在數據庫中運行這個命令以建立緩存表:
python manage.py createcachetable [cache_table_name]
這裏的[cache_table_name]是要建立的數據庫表名(這個名字本身取)
,這個命令以Djangio的數據庫緩存系統所指望的格式建立一個表。
CACHE_BACKEND=‘db://my_cache_table’
數據庫緩存後端使用settings文件指定的同一個數據庫,那麼數據庫緩存的效果最明顯。
文件系統緩存
要把緩存項目放在文件系統中,請爲CACHE_BACKEND使用/'fileL//'的緩存類型,例如,要把緩存數據能夠緩存在/var/tmp/django_cache,若是使用的是windows,在file://以後加上文件的驅動器號。
file://c:/foo/bar
目錄路徑應該是絕對路勁,要改是以你的文件系統的根開始,在設置的結尾放置斜線與否可有可無。
確認該設置指向的目錄存在而且你的Web服務器運行的系統的用戶能夠讀寫該目錄。 繼續上面的例子,若是你的服務器以用戶apache運行,確認/var/tmp/django_cache存在而且用戶apache能夠讀寫/var/tmp/django_cache目錄。
每一個緩存值將被存儲爲單獨的文件,其內容是Python的pickle模塊以序列化(「pickled」)形式保存的緩存數據。 每一個文件的名稱是緩存鍵,以規避開安全文件系統的使用。
若是你想利用內存緩存的速度優點,但又不能使用Memcached,能夠考慮使用本地存儲器緩存後端。 此緩存的多進程和線程安全。 設置 CACHE_BACKEND 爲 locmem:/// 來使用它,例如:
CACHE_BACKEND = 'locmem:///'