緩存是為了保存那些需要很多計(jì)算資源的結(jié)果,這樣的話就不必在下次重復(fù)消耗計(jì)算資源。 下面我們用偽代碼,來解釋緩存怎樣在動(dòng)態(tài)生成的網(wǎng)頁中工作的:
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
1. 設(shè)置緩存
Django 的緩存配置是通過 setting 文件的 CACHES 配置來實(shí)現(xiàn)的。本文僅以數(shù)據(jù)庫緩存為例,其他配置方式請(qǐng)參考官方文檔。
使用數(shù)據(jù)庫緩存前,要在 settings.py 添加如下設(shè)置:
CACHES = {
'default': {
# 使用數(shù)據(jù)庫緩存
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
# 用于保存緩存數(shù)據(jù)的表的名字
'LOCATION': 'my_cache_table',
}
}
然后運(yùn)行這個(gè)命令來創(chuàng)建緩存表:
python manage.py createcachetable
2. Cache 參數(shù)
TIMEOUT:緩存的默認(rèn)過期時(shí)間,以秒為單位, 這個(gè)參數(shù)默認(rèn)是 300 seconds (5 分鐘)。你可以設(shè)置 TIMEOUT 為
None這樣的話,緩存默認(rèn)永遠(yuǎn)不會(huì)過期;如果把值設(shè)置成 0 緩存會(huì)立即失效(緩存就沒有意義了)。-
OPTIONS:這個(gè)參數(shù)應(yīng)該被傳到緩存后端。有效的可選項(xiàng)列表根據(jù)緩存的后端不同而不同,由第三方庫所支持的緩存將會(huì)把這些選項(xiàng)直接配置到底層的緩存庫。
緩存的后端實(shí)現(xiàn)自己的選擇策略 (i.e., the locmem, filesystem and database backends) 將會(huì)履行下面這些選項(xiàng):- MAX_ENTRIES:高速緩存允許的最大條目數(shù),超出這個(gè)數(shù)則舊值將被刪除,這個(gè)參數(shù)默認(rèn)是 300。
-
CULL_FREQUENCY:當(dāng)達(dá)到 MAX_ENTRIES 值的時(shí)候,被刪除的條目比率。該比率可以理解為
1/CULL_FREQUENCY,所以設(shè)置 CULL_FREQUENCY 為 2 會(huì)在達(dá)到 MAX_ENTRIES 值時(shí)會(huì)刪去一半的緩存。這個(gè)參數(shù)應(yīng)該是整數(shù),默認(rèn)為 3。把 CULL_FREQUENCY的值設(shè)置為 0 意味著當(dāng)達(dá)到 MAX_ENTRIES 值時(shí),緩存將被清空。
KEY_PREFIX:將自動(dòng)包含(默認(rèn)情況下預(yù)置為)Django 服務(wù)器使用的所有緩存鍵的字符串。
VERSION:由 Django 服務(wù)器生成的緩存鍵的默認(rèn)版本號(hào)。
KEY_FUNCTION 包含函數(shù)的虛線路徑的字符串,定義如何將前綴,版本和鍵組成最終緩存鍵。
在下面這個(gè)例子中,是一個(gè)使用文件系統(tǒng)緩存后端,緩存過期時(shí)間被設(shè)置為 60 秒,最大條目為 1000。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT': 60,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
非法的參數(shù)會(huì)被忽略掉。