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