Django之緩存

 

 

1、緩存介紹:

在動態網站中紅,用戶全部的請求,服務器都會去數據庫中進行相應的增刪改查、渲染模板,執行業務邏輯,最後生成用戶看到的頁面。css

當一個網站的用戶訪問量很大的時候,每一次的後臺操做,都會消耗不少服務器資源,因此必須使用緩存來緩解後端服務器壓力。html

緩存是講義些經常使用的數據保存內存或者memcache中,在必定的時間內有人來訪問這些數據時,不在去執行數據庫及渲染等操做,直接從內存或memcache的緩存中去取數據,而後返回給用戶。前端

2、Django中的6中緩存方式

  • 開發調試緩存
  • 內存緩存
  • 文件緩存
  • 數據庫緩存
  • Memcache緩存(使用python-memcached模塊)
  • Memcache緩存(使用pylibmc模塊)

常常使用的有文件緩存和內存緩存python

3、Django6種緩存的配置

一、開發調試(此模式爲開發調試使用,實際上不執行任何操做)

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文件中的緩存時間:

會走默認時間

相關文章
相關標籤/搜索