緩存

動態網站的問題在於它是動態的,也就是說每次用戶訪問呢,服務器都要執行數據庫查詢,啓動模板,執行業務邏輯以及最終看到你想看到的一個頁面,這一切都是動態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:///'
相關文章
相關標籤/搜索