Django的緩存(1)-創(chuàng)新互聯(lián)

    最近在主要負(fù)責(zé)公司寫(xiě)公司的財(cái)務(wù)核算、財(cái)務(wù)統(tǒng)計(jì)功能,同時(shí)也突擊惡補(bǔ)了一些財(cái)務(wù)方面的知識(shí)(這些都是次要的),其中最重要的一點(diǎn)是要生成一張資產(chǎn)負(fù)債表。當(dāng)然在生成資產(chǎn)負(fù)債表的時(shí)候,代碼肯定會(huì)去數(shù)據(jù)庫(kù)中查詢大量符合條件的數(shù)據(jù),然后在進(jìn)行計(jì)算得出結(jié)果,這當(dāng)中必然會(huì)影響到頁(yè)面的響應(yīng)速度(后經(jīng)測(cè)試,打開(kāi)頁(yè)面要花55秒),為了提高第二次打開(kāi)頁(yè)面的速度,我想到了使用緩存。下面簡(jiǎn)單的講講django緩存相關(guān)的知識(shí)吧,由于水平有限,不足之處,敬請(qǐng)諒解。

創(chuàng)新互聯(lián)建站成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元內(nèi)蒙古做網(wǎng)站,已為上家服務(wù),為內(nèi)蒙古各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

    緩存是指將需要頻繁訪問(wèn)的網(wǎng)絡(luò)內(nèi)容放在離用戶較近訪問(wèn)速度更快的系統(tǒng)中。緩存方案常見(jiàn)的有兩種,一種是客戶端,也就是web開(kāi)發(fā)中的瀏覽器;一種就是服務(wù)端,以Memcached為代表。這里主要講服務(wù)端緩存。

    下面用一些為代碼來(lái)講講緩存是怎樣在動(dòng)態(tài)網(wǎng)頁(yè)中工作的:

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

Django自帶了緩存系統(tǒng),為了方便起見(jiàn),Django提供了不同級(jí)別的緩存粒度:可以緩存特定視圖的輸出、可以僅僅緩存那些很難生產(chǎn)出來(lái)的部分、或者你可以緩存你的整個(gè)網(wǎng)站。

一、在django中設(shè)置緩存

(1)Memcached

     按照百度上解釋,它是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),用于動(dòng)態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫(kù)負(fù)載。它通過(guò)在內(nèi)存中緩存數(shù)據(jù)和對(duì)象來(lái)減少讀取數(shù)據(jù)庫(kù)的次數(shù),從而提高動(dòng)態(tài)、數(shù)據(jù)庫(kù)驅(qū)動(dòng)網(wǎng)站的速度。Memcached基于一個(gè)存儲(chǔ)鍵/值對(duì)的hashmap。其守護(hù)進(jìn)程(daemon )是用C寫(xiě)的,但是客戶端可以用任何語(yǔ)言來(lái)編寫(xiě),并通過(guò)memcached協(xié)議與守護(hù)進(jìn)程通信

    存儲(chǔ)方式是memcached中保存的數(shù)據(jù)都存儲(chǔ)在memcached內(nèi)置的內(nèi)存存儲(chǔ)空間中,因此它不能取代數(shù)據(jù)庫(kù)或者文件系統(tǒng)的使用。由于數(shù)據(jù)僅存在于內(nèi)存中,因此重啟memcached、重啟操作系統(tǒng)會(huì)導(dǎo)致全部數(shù)據(jù)消失。另外,內(nèi)容容量達(dá)到指定值之后,就基于LRU(Least Recently Used)算法自動(dòng)刪除不使用的緩存。memcached本身是為緩存而設(shè)計(jì)的服務(wù)器,因此并沒(méi)有過(guò)多考慮數(shù)據(jù)的永久性問(wèn)題。

    在安裝 Memcached 后, 還需要安裝 Memcached 依賴模塊。Python 有不少M(fèi)emcache模塊最為常用的是python-memcached and pylibmc兩個(gè)模塊.

ubuntu系統(tǒng)安裝命令:

sudo apt-get install memcached pip install python-memcached

    在Django中使用Memcached時(shí):
   將 BACKEND 設(shè)置為django.core.cache.backends.memcached.MemcachedCache 或者 django.core.cache.backends.memcached.PyLibMCCache (取決于你所選綁定memcached的方式)
   將 LOCATION 設(shè)置為 ip:port 值,ip 是 Memcached 守護(hù)進(jìn)程的ip地址, port 是Memcached 運(yùn)行的端口?;蛘咴O(shè)置為 unix:path 值,path 是 Memcached Unix socket file的路徑.
     下面的例子中,Memcached 運(yùn)行再 本地 (127.0.0.1) 的11211端口,使用 python-memcached:

CACHES = {     'default': {         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',         'LOCATION': '127.0.0.1:11211',     } }下面的例子中,Memcached 通過(guò)一個(gè)本地的Unix socket file/tmp/memcached.sock 來(lái)交互,也使用python-memcached:CACHES = {     'default': {         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',         'LOCATION': 'unix:/tmp/memcached.sock',     } }

Memcached有一個(gè)非常好的特點(diǎn)就是可以讓幾個(gè)服務(wù)的緩存共享。 這就意味著你可以再幾個(gè)物理機(jī)上運(yùn)行Memcached服務(wù),這些程序?qū)?huì)把這幾個(gè)機(jī)器當(dāng)做 同一個(gè) 緩存,從而不需要復(fù)制每個(gè)緩存的值在每個(gè)機(jī)器上。為了使用這個(gè)特性,把所有的服務(wù)地址放在LOCATION里面,用分號(hào)隔開(kāi)或者當(dāng)做一個(gè)list。

CACHES = {     'default': {         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',         'LOCATION': [             '172.19.26.240:11211',             '172.19.26.242:11211',         ]     } }

(2)Databasecache

    Django 可以把緩存保存在你的數(shù)據(jù)庫(kù)里。如果你有一個(gè)快速的、專業(yè)的數(shù)據(jù)庫(kù)服務(wù)器的話那這種方式是效果最好的。
為了把數(shù)據(jù)表用來(lái)當(dāng)做你的緩存后臺(tái):
       把BACKEND設(shè)置為django.core.cache.backends.db.DatabaseCache
       把 LOCATION 設(shè)置為 tablename, 數(shù)據(jù)表的名稱。這個(gè)名字可以是任何你想要的名字,只要它是一個(gè)合法的表名并且在你的數(shù)據(jù)庫(kù)中沒(méi)有被使用過(guò)。

CACHES = {     'default': {         'BACKEND': 'django.core.cache.backends.db.DatabaseCache',         'LOCATION': 'my_cache_table',     } }

但是在使用之前要?jiǎng)?chuàng)建一個(gè)緩存表

python manage.py createcachetable

如果你使用多數(shù)據(jù)庫(kù)緩存, createcachetable會(huì)在每個(gè)緩存中創(chuàng)建一個(gè)表。
如果你使用多數(shù)據(jù)庫(kù),createcachetable會(huì)遵循你的數(shù)據(jù)庫(kù)路由中的allow_migrate()方法

像migrate, createcachetable 這樣的命令不會(huì)碰觸現(xiàn)有的表。它只創(chuàng)建非現(xiàn)有的表。

(3)文件系統(tǒng)緩存

基于文件的緩存后端序列化和存儲(chǔ)每個(gè)緩存值作為一個(gè)單獨(dú)的文件。 為了使用這個(gè)文件緩存,你要設(shè)置BACKEND為 "django.core.cache.backends.filebased.FileBasedCache" 并且 LOCATION 設(shè)置為一個(gè)合適的目錄。例如,把緩存儲(chǔ)存在 /var/tmp/django_cache,就用這個(gè)設(shè)置:

CACHES = {     'default': {         'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',         'LOCATION': '/var/tmp/django_cache',     } }

路徑應(yīng)該是絕對(duì)路徑– 也就是說(shuō),要從你的系統(tǒng)路徑開(kāi)始算。你在末尾添加不添加斜杠都是無(wú)所謂的。
請(qǐng)確保,你的路徑指向是存在的并且,這個(gè)路徑下 你有系統(tǒng)用戶的足夠的讀,寫(xiě)權(quán)限。繼續(xù)上面的例子,如果你是一個(gè) 名叫apache用戶,確保 /var/tmp/django_cache這個(gè)路徑存在并且apache有讀和寫(xiě)的權(quán)力。

(4)本地緩存

這是默認(rèn)的緩存,如果你不在指定其他的緩存設(shè)置。如果你想要具有高速這個(gè)有點(diǎn)的基于內(nèi)存的緩存但是又沒(méi)有能力帶動(dòng) Memcached, 那就考慮一下本地緩存吧。

    CACHES = {     'default': {         'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',         'LOCATION': 'unique-snowflake',     } }

二、cache參數(shù)

上面的django的setting文件里的CACHES參數(shù)還可以設(shè)置一些其它的參數(shù),如下:

TIMEOUT:緩存的默認(rèn)過(guò)期時(shí)間,以秒為單位, 這個(gè)參數(shù)默認(rèn)是 300 seconds (5 分鐘).

當(dāng)設(shè)置為 None 的時(shí)候,緩存默認(rèn)永遠(yuǎn)不會(huì)過(guò)期。值設(shè)置成0造成緩存立即失效(緩存就沒(méi)有意義了)。

OPTIONS: 這個(gè)參數(shù)應(yīng)該被傳到緩存后端。有效的可選項(xiàng)列表根據(jù)緩存的后端不同而不同,由第三方庫(kù)所支持的緩存將會(huì)把這些選項(xiàng)直接配置到底層的緩存庫(kù)。

緩存的后端實(shí)現(xiàn)自己的選擇策略 將會(huì)履行下面這些選項(xiàng):

MAX_ENTRIES:高速緩存允許的大條目數(shù),超出這個(gè)數(shù)則舊值將被刪除. 這個(gè)參數(shù)默認(rèn)是300.

CULL_FREQUENCY:當(dāng)達(dá)到MAX_ENTRIES 的時(shí)候,被刪除的條目比率。 實(shí)際比率是 1 / CULL_FREQUENCY, 所以設(shè)置CULL_FREQUENCY 為2會(huì)在達(dá)到MAX_ENTRIES 所設(shè)置值時(shí)刪去一半的緩存。這個(gè)參數(shù)應(yīng)該是整數(shù),默認(rèn)為 3.

把 CULL_FREQUENCY的值設(shè)置為 0 意味著當(dāng)達(dá)到MAX_ENTRIES時(shí),緩存將被清空。某些緩存后端 (database尤其)這將以很多緩存丟失為代價(jià),大大提高接受訪問(wèn)的速度。

KEY_PREFIX:一個(gè)字符串,它將自動(dòng)包括 (默認(rèn)預(yù)置) 到 Django 服務(wù)器所使用的所有緩存密鑰

VERSION:由 Django 服務(wù)器生成的緩存鍵的默認(rèn)版本號(hào)

KEY_FUNCTION:包含一個(gè)函數(shù),定義了如何將組合成一個(gè)最后的緩存鍵的前綴、 版本和鍵虛線的路徑的字符串

CACHES = {     'default': {         'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',         'LOCATION': '/var/tmp/django_cache',         'TIMEOUT': 60,         'OPTIONS': {             'MAX_ENTRIES': 1000         }     }}

上面的例子是一個(gè)文件系統(tǒng)緩存后端,緩存過(guò)期時(shí)間被設(shè)置為60秒,大條目為1000。非法的參數(shù)將會(huì)被系統(tǒng)自動(dòng)忽視掉。

緩存的知識(shí)就介紹到這里,很晚了,明天再接著介紹緩存的使用吧,以上知識(shí)僅供參考,也許寫(xiě)的不夠好,但知識(shí)最重要的還是應(yīng)用,只有應(yīng)用的時(shí)候才能慢慢體會(huì)它的原理以及精妙之處。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章標(biāo)題:Django的緩存(1)-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article44/hepee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、商城網(wǎng)站網(wǎng)站內(nèi)鏈、網(wǎng)站排名、全網(wǎng)營(yíng)銷(xiāo)推廣面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司