最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django如何實現(xiàn)內(nèi)容緩存示例詳解

 更新時間:2017年09月24日 10:52:21   作者:renpingsheng  
緩存對于大家來說應該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Django如何實現(xiàn)內(nèi)容緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

前言

本文主要給大家介紹了關(guān)于Django實現(xiàn)內(nèi)容緩存的相關(guān)內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

1.緩存的簡介

在動態(tài)網(wǎng)站中,用戶所有的請求,服務器都會去數(shù)據(jù)庫中進行相應的增,刪,查,改,渲染模板,執(zhí)行業(yè)務邏輯,最后生成用戶看到的頁面.

當一個網(wǎng)站的用戶訪問量很大的時候,每一次的的后臺操作,都會消耗很多的服務端資源,所以必須使用緩存來減輕后端服務器的壓力.

緩存是將一些常用的數(shù)據(jù)保存內(nèi)存或者memcache中,在一定的時間內(nèi)有人來訪問這些數(shù)據(jù)時,則不再去執(zhí)行數(shù)據(jù)庫及渲染等操作,而是直接從內(nèi)存或memcache的緩存中去取得數(shù)據(jù),然后返回給用戶.

2.Django提供了6種緩存方式

  • 開發(fā)調(diào)試緩存
  • 內(nèi)存緩存
  • 文件緩存
  • 數(shù)據(jù)庫緩存
  • Memcache緩存(使用python-memcached模塊)
  • Memcache緩存(使用pylibmc模塊)

經(jīng)常使用的有文件緩存和Mencache緩存

2.1 各種緩存方式的配置文件說明

2.1.1 開發(fā)調(diào)試(此模式為開發(fā)調(diào)試使用,實際上不執(zhí)行任何操作)

settings.py文件配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 緩存后臺使用的引擎
  'TIMEOUT': 300,            # 緩存超時時間(默認300秒,None表示永不過期,0表示立即過期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,          # 最大緩存記錄的數(shù)量(默認300)
   'CULL_FREQUENCY': 3,          # 緩存到達最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認3)
  },
 }
}

2.1.2 內(nèi)存緩存(將緩存內(nèi)容保存至內(nèi)存區(qū)域中)

settings.py文件配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 指定緩存使用的引擎
  'LOCATION': 'unique-snowflake',         # 寫在內(nèi)存中的變量的唯一值 
  'TIMEOUT':300,             # 緩存超時時間(默認為300秒,None表示永不過期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,           # 最大緩存記錄的數(shù)量(默認300)
   'CULL_FREQUENCY': 3,          # 緩存到達最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認3)
  }  
 }
}

2.1.3 文件緩存(把緩存數(shù)據(jù)存儲在文件中)

settings.py文件配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定緩存使用的引擎
  'LOCATION': '/var/tmp/django_cache',        #指定緩存的路徑
  'TIMEOUT':300,              #緩存超時時間(默認為300秒,None表示永不過期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大緩存記錄的數(shù)量(默認300)
   'CULL_FREQUENCY': 3,           # 緩存到達最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認3)
  }
 }   
}

2.1.4 數(shù)據(jù)庫緩存(把緩存數(shù)據(jù)存儲在數(shù)據(jù)庫中)

settings.py文件配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  # 指定緩存使用的引擎
  'LOCATION': 'cache_table',          # 數(shù)據(jù)庫表    
  'OPTIONS':{
   'MAX_ENTRIES': 300,           # 最大緩存記錄的數(shù)量(默認300)
   'CULL_FREQUENCY': 3,          # 緩存到達最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認3)
  }  
 }   
}

注意,創(chuàng)建緩存的數(shù)據(jù)庫表使用的語句:

python manage.py createcachetable

Memcached是Django原生支持的緩存系統(tǒng).要使用Memcached,需要下載Memcached的支持庫python-memcached或pylibmc.

2.1.5 Memcache緩存(使用python-memcached模塊連接memcache)

settings.py文件配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', # 指定緩存使用的引擎
  'LOCATION': '192.168.10.100:11211',         # 指定Memcache緩存服務器的IP地址和端口
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大緩存記錄的數(shù)量(默認300)
   'CULL_FREQUENCY': 3,           # 緩存到達最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認3)
  }
 }
}

LOCATION也可以配置成如下:

'LOCATION': 'unix:/tmp/memcached.sock',   # 指定局域網(wǎng)內(nèi)的主機名加socket套接字為Memcache緩存服務器
'LOCATION': [         # 指定一臺或多臺其他主機ip地址加端口為Memcache緩存服務器
 '192.168.10.100:11211',
 '192.168.10.101:11211',
 '192.168.10.102:11211',
]

2.1.6 Memcache緩存(使用pylibmc模塊連接memcache)

settings.py文件配置
 CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',  # 指定緩存使用的引擎
   'LOCATION':'192.168.10.100:11211',         # 指定本機的11211端口為Memcache緩存服務器
   'OPTIONS':{
    'MAX_ENTRIES': 300,            # 最大緩存記錄的數(shù)量(默認300)
    'CULL_FREQUENCY': 3,           # 緩存到達最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認3)
   },  
  }
 }

LOCATION也可以配置成如下:

'LOCATION': '/tmp/memcached.sock',  # 指定某個路徑為緩存目錄
'LOCATION': [       # 分布式緩存,在多臺服務器上運行Memcached進程,程序會把多臺服務器當作一個單獨的緩存,而不會在每臺服務器上復制緩存值
 '192.168.10.100:11211',
 '192.168.10.101:11211',
 '192.168.10.102:11211',
]

Memcached是基于內(nèi)存的緩存,數(shù)據(jù)存儲在內(nèi)存中.所以如果服務器死機的話,數(shù)據(jù)就會丟失,所以Memcached一般與其他緩存配合使用

3.Django中的緩存應用

Django提供了不同粒度的緩存,可以緩存某個頁面,可以只緩存一個頁面的某個部分,甚至可以緩存整個網(wǎng)站.

3.1 單獨視圖緩存

例子,為單個視圖函數(shù)添加緩存

路由配置:

url(r'^index$',views.index),

數(shù)據(jù)庫

views代碼:

from app01 import models
from django.views.decorators.cache import cache_page
import time

@cache_page(15)         #超時時間為15秒
def index(request):
 user_list=models.UserInfo.objects.all()  #從數(shù)據(jù)庫中取出所有的用戶對象
 ctime=time.time()       #獲取當前時間
 return render(request,"index.html",{"user_list":user_list,"ctime":ctime})

index.html代碼:

body>
<h1>{{ ctime }}</h1>
<ul>
 {% for user in user_list %}
  <li>{{ user.name }}</li>
 {% endfor %}
</ul>
</body>

因為緩存的原因,不停的刷新瀏覽器時會發(fā)現(xiàn),頁面上顯示的時間每15秒鐘變化一次.

在立即刷新瀏覽器的時候,立即在數(shù)據(jù)庫中添加一個用戶對象,此時繼續(xù)刷新瀏覽器,前端頁面上不會顯示剛才添加的用戶

一直刷新瀏覽器15秒后,新添加的用戶才用在前端頁面上顯示出來.

上面的例子是基于內(nèi)存的緩存配置,基于文件的緩存該怎么配置呢??

更改settings.py的配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定緩存使用的引擎
  'LOCATION': 'E:\django_cache',          # 指定緩存的路徑
  'TIMEOUT': 300,              # 緩存超時時間(默認為300秒,None表示永不過期)
  'OPTIONS': {
   'MAX_ENTRIES': 300,            # 最大緩存記錄的數(shù)量(默認300)
   'CULL_FREQUENCY': 3,           # 緩存到達最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認3)
  }
 }
}

然后再次刷新瀏覽器,可以看到在剛才配置的目錄下生成的緩存文件

通過實驗可以知道,Django會以自己的形式把緩存文件保存在配置文件中指定的目錄中.

3.2 全站使用緩存

既然是全站緩存,當然要使用Django中的中間件.

用戶的請求通過中間件,經(jīng)過一系列的認證等操作,如果請求的內(nèi)容在緩存中存在,則使用FetchFromCacheMiddleware獲取內(nèi)容并返回給用戶

當返回給用戶之前,判斷緩存中是否已經(jīng)存在,如果不存在,則UpdateCacheMiddleware會將緩存保存至Django的緩存之中,以實現(xiàn)全站緩存

修改settings.py配置文件

MIDDLEWARE = [
 'django.middleware.cache.UpdateCacheMiddleware',   #響應HttpResponse中設(shè)置幾個headers
 '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',
 'django.middleware.cache.FetchFromCacheMiddleware',   #用來緩存通過GET和HEAD方法獲取的狀態(tài)碼為200的響應
]

CACHE__MIDDLEWARE_SECONDS=15         # 設(shè)定超時時間為15秒

views視圖函數(shù)

from django.shortcuts import render
import time

def index(request):
 ctime = time.time()
 return render(request,'index.html',{'ctime':ctime})

其余代碼不變,刷新瀏覽器是15秒,頁面上的時間變化一次,這樣就實現(xiàn)了全站緩存.

3.3 局部視圖緩存

例子,刷新頁面時,整個網(wǎng)頁有一部分實現(xiàn)緩存

views視圖函數(shù)

from django.shortcuts import render
import time

def index(request):
 # user_list = models.UserInfo.objects.all()
 ctime = time.time()
 return render(request,'index.html',{'ctime':ctime}) 

 前端網(wǎng)頁

{% load cache %}    # 加載緩存
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<h1>{{ ctime }}</h1>
{% cache 15 'aaa' %}   # 設(shè)定超時時間為15秒
 <h1>{{ ctime }}</h1>
{% endcache %}
</body>
</html>

刷新瀏覽器可以看到,第一個時間實時變化,后面一個時間每15秒鐘變化一次

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Python制作爬蟲抓取美女圖

    Python制作爬蟲抓取美女圖

    本文主要介紹了Python制作爬蟲抓取美女圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2016-01-01
  • python leetcode 字符串相乘實例詳解

    python leetcode 字符串相乘實例詳解

    這篇文章主要介紹了python leetcode 字符串相乘的示例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • django Admin文檔生成器使用詳解

    django Admin文檔生成器使用詳解

    這篇文章主要介紹了django Admin文檔生成器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python3中PyQt5簡單實現(xiàn)文件打開及保存

    Python3中PyQt5簡單實現(xiàn)文件打開及保存

    本文將結(jié)合實例代碼,介紹Python3中PyQt5簡單實現(xiàn)文件打開及保存,具有一定的參考價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • django 取消csrf限制的實例

    django 取消csrf限制的實例

    這篇文章主要介紹了django 取消csrf限制的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python實現(xiàn)文本文件拆分寫入到多個文本文件的方法

    Python實現(xiàn)文本文件拆分寫入到多個文本文件的方法

    這篇文章主要介紹了Python實現(xiàn)文本文件拆分寫入到多個文本文件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Python實現(xiàn)封裝打包自己寫的代碼,被python import

    Python實現(xiàn)封裝打包自己寫的代碼,被python import

    這篇文章主要介紹了Python實現(xiàn)封裝打包自己寫的代碼,被python import,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python強大郵件處理庫Imbox安裝及用法示例

    Python強大郵件處理庫Imbox安裝及用法示例

    這篇文章主要給大家介紹了關(guān)于Python強大郵件處理庫Imbox安裝及用法的相關(guān)資料,Imbox是一個Python 庫,用于從IMAP郵箱中讀取郵件,它提供了簡單易用的接口,幫助開發(fā)者處理郵件,需要的朋友可以參考下
    2024-03-03
  • Python實現(xiàn)生成bmp圖像的方法

    Python實現(xiàn)生成bmp圖像的方法

    本文主要介紹了Python實現(xiàn)生成bmp圖像的方法,對大家的學習具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • Python+Selenium隨機生成手機驗證碼并檢查頁面上是否彈出重復手機號碼提示框

    Python+Selenium隨機生成手機驗證碼并檢查頁面上是否彈出重復手機號碼提示框

    這篇文章主要介紹了Python+Selenium隨機生成手機驗證碼并檢查頁面上是否彈出重復手機號碼提示框,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論

凉城县| 敦煌市| 淳安县| 遂溪县| 阳泉市| 甘谷县| 精河县| 日喀则市| 安庆市| 吴忠市| 县级市| 烟台市| 垣曲县| 比如县| 定州市| 徐汇区| 甘孜县| 宜阳县| 佛坪县| 弥勒县| 昌都县| 林周县| 阿瓦提县| 灌云县| 无锡市| 长沙市| 林州市| 翼城县| 靖西县| 丰顺县| 克拉玛依市| 西安市| 久治县| 广昌县| 阿巴嘎旗| 三门县| 宜章县| 宣威市| 河东区| 宝山区| 资溪县|