在動態網站中紅,用戶全部的請求,服務器都會去數據庫中進行相應的增刪改查、渲染模板,執行業務邏輯,最後生成用戶看到的頁面。css
當一個網站的用戶訪問量很大的時候,每一次的後臺操做,都會消耗不少服務器資源,因此必須使用緩存來緩解後端服務器壓力。html
緩存是講義些經常使用的數據保存內存或者memcache中,在必定的時間內有人來訪問這些數據時,不在去執行數據庫及渲染等操做,直接從內存或memcache的緩存中去取數據,而後返回給用戶。前端
常常使用的有文件緩存和內存緩存python
settings.py文件位置jquery
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 緩存後臺使用的引擎 'TIMEOUT': 300, # 緩存超時時間(默認300秒,None表示永不過時,0表示當即過時) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大緩存記錄的數量(默認300) 'CULL_FREQUENCY': 3, # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) }, } }
settings.py文件配置:數據庫
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', # 指定緩存使用的引擎 'LOCATION': 'unique-snowflake', # 寫在內存中的變量的惟一值 'TIMEOUT':300, # 緩存超時時間(默認爲300秒,None表示永不過時) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大緩存記錄的數量(默認300) 'CULL_FREQUENCY': 3, # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } }
三、文件緩存(把花村數據存儲到文件中)django
settings.py配置bootstrap
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定緩存使用的引擎 'LOCATION': '/var/tmp/django_cache', #指定緩存的路徑 'TIMEOUT':300, #緩存超時時間(默認爲300秒,None表示永不過時) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大緩存記錄的數量(默認300) 'CULL_FREQUENCY': 3, # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } }
四、數據庫緩存(把要緩存的數據緩存到數據庫中)後端
settings.py文件配置緩存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 指定緩存使用的引擎 'LOCATION': 'cache_table', # 數據庫表 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大緩存記錄的數量(默認300) 'CULL_FREQUENCY': 3, # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } }
實驗:文件緩存:
設置settings文件:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定緩存使用的引擎 # 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', # 指定緩存使用的引擎 'LOCATION': 'F:\老男孩Python7期\day76\緩存', # 寫在內存中的變量的惟一值 'TIMEOUT':300, # 緩存超時時間(默認爲300秒,None表示永不過時) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大緩存記錄的數量(默認300) 'CULL_FREQUENCY': 3, # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } }
在視圖文件中設置:
import time from django.views.decorators.cache import cache_page @cache_page(5) #表明緩存時間 def index(request): ctime=time.time() return render(request,'index.html',{'time':ctime})
設置路由:
url(r'^index/',views.index),
設置index.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> </head> <body> {{ time }} </body> </html>
實現效果:
根據在視圖中設置的裝飾器cache_page(5),實現的效果就是每5秒更新一次時間戳,由此能夠判斷讀取的是緩存文件
緩存文件
設置局部緩存:
取消視圖中設置的裝飾器:
這個時候刷新頁面顯示沒有作緩存:
修改index.html頁面實現兩個時間
實現局部效果:一個時間刷新,一個時間實現緩存
實現效果:刷新頁面,一個值變化,一個值緩存五秒變動一次
在settings.py中配置兩個中間件,注意順序:
MIDDLEWARE = [ # 響應HttpResponse中設置幾個headers 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', #用來緩存經過GET和HEAD方法獲取的狀態碼爲200的響應 'django.middleware.cache.FetchFromCacheMiddleware' ] # 設置緩存時間 CACHE_MIDDLEWARE_SECONDS=5
取消視圖中的裝飾器
取消前端index.html頁面中設置的load
頁面顯示(根據參數
CACHE_MIDDLEWARE_SECONDS限制緩存時間
):
當註釋掉settings文件中的緩存時間:
會走默認時間