亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

1.緩存的簡介

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

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

緩存是將一些常用的數(shù)據(jù)保存內(nèi)存或者memcache中,在一定的時(shí)間內(nèi)有人來訪問這些數(shù)據(jù)時(shí),則不再去執(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)試使用,實(shí)際上不執(zhí)行任何操作)

settings.py文件配置

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

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

settings.py文件配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定緩存使用的引擎
  'LOCATION': '/var/tmp/django_cache',        #指定緩存的路徑
  'TIMEOUT':300,              #緩存超時(shí)時(shí)間(默認(rèn)為300秒,None表示永不過期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大緩存記錄的數(shù)量(默認(rèn)300)
   'CULL_FREQUENCY': 3,           # 緩存到達(dá)最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)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ù)量(默認(rèn)300)
   'CULL_FREQUENCY': 3,          # 緩存到達(dá)最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)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緩存服務(wù)器的IP地址和端口
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大緩存記錄的數(shù)量(默認(rèn)300)
   'CULL_FREQUENCY': 3,           # 緩存到達(dá)最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
  }
 }
}

LOCATION也可以配置成如下:

'LOCATION': 'unix:/tmp/memcached.sock',   # 指定局域網(wǎng)內(nèi)的主機(jī)名加socket套接字為Memcache緩存服務(wù)器
'LOCATION': [         # 指定一臺或多臺其他主機(jī)ip地址加端口為Memcache緩存服務(wù)器
 '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',         # 指定本機(jī)的11211端口為Memcache緩存服務(wù)器
   'OPTIONS':{
    'MAX_ENTRIES': 300,            # 最大緩存記錄的數(shù)量(默認(rèn)300)
    'CULL_FREQUENCY': 3,           # 緩存到達(dá)最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
   },  
  }
 }

LOCATION也可以配置成如下:

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

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

3.Django中的緩存應(yīng)用

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

3.1 單獨(dú)視圖緩存

例子,為單個視圖函數(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)         #超時(shí)時(shí)間為15秒
def index(request):
 user_list=models.UserInfo.objects.all()  #從數(shù)據(jù)庫中取出所有的用戶對象
 ctime=time.time()       #獲取當(dāng)前時(shí)間
 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>

因?yàn)榫彺娴脑?不停的刷新瀏覽器時(shí)會發(fā)現(xiàn),頁面上顯示的時(shí)間每15秒鐘變化一次.

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

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

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

更改settings.py的配置

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

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

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

3.2 全站使用緩存

既然是全站緩存,當(dāng)然要使用Django中的中間件.

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

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

修改settings.py配置文件

MIDDLEWARE = [
 'django.middleware.cache.UpdateCacheMiddleware',   #響應(yīng)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的響應(yīng)
]

CACHE__MIDDLEWARE_SECONDS=15         # 設(shè)定超時(shí)時(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秒,頁面上的時(shí)間變化一次,這樣就實(shí)現(xiàn)了全站緩存.

3.3 局部視圖緩存

例子,刷新頁面時(shí),整個網(wǎng)頁有一部分實(shí)現(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è)定超時(shí)時(shí)間為15秒
 <h1>{{ ctime }}</h1>
{% endcache %}
</body>
</html>

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

總結(jié)

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

相關(guān)文章

  • 使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

    使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

    這篇文章主要介紹了使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python異常中else的實(shí)例用法

    python異常中else的實(shí)例用法

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python異常中else的實(shí)例用法,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-06-06
  • Python利用BeautifulSoup解析Html的方法示例

    Python利用BeautifulSoup解析Html的方法示例

    BeautifulSoup是python的一個庫,最主要的功能是從網(wǎng)頁抓取數(shù)據(jù)。下面這篇文章主要給大家介紹了關(guān)于Python利用BeautifulSoup解析Html的方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • Python基礎(chǔ)教程之裝飾器詳解

    Python基礎(chǔ)教程之裝飾器詳解

    眾所周知,Python裝飾器是一種常見的元編程特性,在本教程中,我們將深入探討Python裝飾器的基本概念、語法及其應(yīng)用,并利用實(shí)際例子加深理解,感興趣的小伙伴快跟隨小編一起了解一下吧
    2023-06-06
  • python 獲取微信好友列表的方法(微信web)

    python 獲取微信好友列表的方法(微信web)

    今天小編就為大家分享一篇python 獲取微信好友列表的方法(微信web),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python實(shí)現(xiàn)的調(diào)用C語言函數(shù)功能簡單實(shí)例

    Python實(shí)現(xiàn)的調(diào)用C語言函數(shù)功能簡單實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)的調(diào)用C語言函數(shù)功能,結(jié)合簡單實(shí)例形式分析了Python使用ctypes模塊調(diào)用C語言函數(shù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Python數(shù)據(jù)結(jié)構(gòu)之遞歸方法詳解

    Python數(shù)據(jù)結(jié)構(gòu)之遞歸方法詳解

    這篇文章主要為大家介紹了遞歸的基本概念以及如何構(gòu)建遞歸程序。通過本章的學(xué)習(xí),大家可以理解遞歸的基本概念,了解遞歸背后蘊(yùn)含的編程思想以及掌握構(gòu)建遞歸程序的方法,需要的可以參考一下
    2022-04-04
  • Python Django獲取URL中的數(shù)據(jù)詳解

    Python Django獲取URL中的數(shù)據(jù)詳解

    這篇文章主要介紹了Python Django獲取URL中的數(shù)據(jù)詳解,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考
    2021-11-11
  • 使用python+poco+夜神模擬器進(jìn)行自動化測試實(shí)例

    使用python+poco+夜神模擬器進(jìn)行自動化測試實(shí)例

    這篇文章主要介紹了使用python+poco+夜神模擬器進(jìn)行自動化測試實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python 實(shí)現(xiàn)任意區(qū)域文字識別(OCR)操作

    Python 實(shí)現(xiàn)任意區(qū)域文字識別(OCR)操作

    這篇文章主要介紹了Python 實(shí)現(xiàn)任意區(qū)域文字識別(OCR)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論