欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文了解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ù)庫中進(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ù)庫及渲染等操作,而是直接從內(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ù)庫緩存db.DatabaseCache

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

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

python manage.py createcachetable

Memcache緩存memcached.MemcachedCache

使用python-memcached模塊連接memcache;

Memcached是Django原生支持的緩存系統(tǒng).要使用Memcached,需要下載Memcached的支持庫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)文章

最新評(píng)論