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