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

一文了解Django緩存機(jī)制

 更新時(shí)間:2023年03月20日 09:24:56   作者:Al6n Lee  
本文主要介紹了一文了解Django緩存機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

緩存的介紹

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

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

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

可以局部緩存,也可以全站緩存(可以放在中間件中)

Django的6種緩存方式

開發(fā)調(diào)試緩存dummy.DummyCache

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

settings.py文件配置如下:

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

內(nèi)存緩存locmem.LocMemCache

將緩存內(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á)最大個(gè)數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
          }  
     }
}

文件緩存filebased.FileBasedCache??

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

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á)最大個(gè)數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
          }
     }   
}

數(shù)據(jù)庫(kù)緩存db.DatabaseCache

把緩存數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中

settings.py文件配置如下:

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

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

python manage.py createcachetable

Memcache緩存memcached.MemcachedCache

使用python-memcached模塊連接memcache;

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

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

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á)最大個(gè)數(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': [ ? ? ? ? # 指定一臺(tái)或多臺(tái)其他主機(jī)ip地址加端口為Memcache緩存服務(wù)器
?'192.168.10.100:11211',
?'192.168.10.101:11211',
?'192.168.10.102:11211',
]

Memcache緩存memcached.PyLibMCCache

使用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á)最大個(gè)數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
           },  
      }
 }

LOCATION也可以配置成如下:

'LOCATION': '/tmp/memcached.sock', ?# 指定某個(gè)路徑為緩存目錄


'LOCATION': [ ? ? ? # 分布式緩存,在多臺(tái)服務(wù)器上運(yùn)行Memcached進(jìn)程,程序會(huì)把多臺(tái)服務(wù)器當(dāng)作一個(gè)單獨(dú)的緩存,而不會(huì)在每臺(tái)服務(wù)器上復(fù)制緩存值
?'192.168.10.100:11211',
?'192.168.10.101:11211',
?'192.168.10.102:11211',
]

Django緩存的應(yīng)用

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

內(nèi)存緩存@cache_page(timeout)

視圖

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

@cache_page(15) ? ? ? ? ?#超時(shí)時(shí)間為15秒
def index(request):
  t=time.time() ? ? ?#獲取當(dāng)前時(shí)間
  bookList=Book.objects.all()
  return render(request,"index.html",locals())

文件緩存

  • 更改settings.py的配置
  • 再次刷新瀏覽器,可以看到在剛才配置的目錄下生成的緩存文件
  • Django會(huì)以自己的形式把緩存文件保存在配置文件中指定的目錄中

全站使用緩存

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

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

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

settings.py文件配置

#緩存整個(gè)站點(diǎn),是最簡(jiǎn)單的緩存方法--------默認(rèn)是放在內(nèi)存中

#在 MIDDLEWARE_CLASSES 中加入 'update' 和 'fetch' 中間件
MIDDLEWARE_CLASSES = (
? ? 'django.middleware.cache.UpdateCacheMiddleware', # 第一,響應(yīng)HttpResponse中設(shè)置幾個(gè)headers
? ? 'django.middleware.common.CommonMiddleware',
? ? '...',
? ? 'django.middleware.cache.FetchFromCacheMiddleware', # 最后,用來緩存通過GET和HEAD方法獲取的狀態(tài)碼為200的響應(yīng)
)
# 'update' 必須配置在第一個(gè)
# 'fetch' 必須配置在最后一個(gè)

CACHE_MIDDLEWARE_SECONDS=10

視圖層

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


def index(request):
   print(1111111111) ? #遇到中間件就直接返回了,在刷新頁面,在終端就不會(huì)再打印1111111111了
? ? ?t=time.time() ? ? ?#獲取當(dāng)前時(shí)間
? ? ?bookList=Book.objects.all()
? ? ?return render(request,"index.html",locals())

def foo(request):
? ? t=time.time() ? ? ?#獲取當(dāng)前時(shí)間
? ? return HttpResponse("HELLO:"+str(t))

模板(index.html):

<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <title>Title</title>
</head>
<body>
<h3 style="color: green">當(dāng)前時(shí)間:-----{{ t }}</h3>

<ul>
? ? {% for book in bookList %}
? ? ? ?<li>{{ book.name }}--------->{{ book.price }}$</li>
? ? {% endfor %}
</ul>

</body>
</html>

到此這篇關(guān)于一文了解Django緩存機(jī)制的文章就介紹到這了,更多相關(guān)Django緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python爬蟲的工作原理

    python爬蟲的工作原理

    本文主要介紹了python爬蟲的工作原理,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • Python制作CSDN免積分下載器

    Python制作CSDN免積分下載器

    本文給大家分享的是使用python實(shí)現(xiàn)的CSDN的免積分下載器,具體干嘛的,我相信你懂的~~~有需要的小伙伴自己來看看哈。
    2015-03-03
  • python連接本地SQL?server詳細(xì)圖文教程

    python連接本地SQL?server詳細(xì)圖文教程

    在數(shù)據(jù)分析領(lǐng)域,經(jīng)常需要從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)進(jìn)行分析和處理,下面這篇文章主要介紹了python連接本地SQL?server的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Django中的Signal代碼詳解

    Django中的Signal代碼詳解

    這篇文章主要介紹了Django中的Signal代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • python如何把字符串類型list轉(zhuǎn)換成list

    python如何把字符串類型list轉(zhuǎn)換成list

    這篇文章主要介紹了python如何吧字符串類型list轉(zhuǎn)換成list,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python中使用copy模塊實(shí)現(xiàn)列表(list)拷貝

    Python中使用copy模塊實(shí)現(xiàn)列表(list)拷貝

    這篇文章主要介紹了Python中使用copy模塊實(shí)現(xiàn)列表(list)拷貝,本文講解了簡(jiǎn)單列表的復(fù)制和復(fù)雜列表復(fù)制的解決方法,需要的朋友可以參考下
    2015-04-04
  • python使用rsa非對(duì)稱加密過程解析

    python使用rsa非對(duì)稱加密過程解析

    這篇文章主要介紹了python使用rsa非對(duì)稱加密過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python如何讀取和存儲(chǔ)dict()與.json格式文件

    python如何讀取和存儲(chǔ)dict()與.json格式文件

    這篇文章主要介紹了python如何讀取和存儲(chǔ)dict()與.json格式文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-06-06
  • 使用Python操作FTP實(shí)現(xiàn)上傳和下載的方法

    使用Python操作FTP實(shí)現(xiàn)上傳和下載的方法

    今天小編就為大家分享一篇關(guān)于使用Python操作FTP實(shí)現(xiàn)上傳和下載的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • python調(diào)用ffmpeg命令行工具便捷操作視頻示例實(shí)現(xiàn)過程

    python調(diào)用ffmpeg命令行工具便捷操作視頻示例實(shí)現(xiàn)過程

    現(xiàn)在短視頻很流行,有很多視頻編輯軟件,功能豐富,而我們需要的只是裁剪功能,而且需要用編程的方式調(diào)用,那么最合適的莫過于ffmpeg了
    2021-11-11

最新評(píng)論

榆社县| 乳源| 东山县| 肥乡县| 阿拉善右旗| 荣成市| 宁都县| 怀远县| 苏尼特右旗| 平江县| 布拖县| 平罗县| 山西省| 河北区| 贡觉县| 宁陵县| 益阳市| 虎林市| 安国市| 红河县| 桐梓县| 丹阳市| 林甸县| 姚安县| 南京市| 龙陵县| 怀仁县| 汉川市| 抚州市| 林西县| 沅江市| 定结县| 抚顺市| 保康县| 牟定县| 卓资县| 亳州市| 蓬溪县| 峡江县| 吴川市| 自贡市|