django緩存

緩存就是將你常用的數(shù)據(jù)放在內(nèi)存里面,方便大量的訪問,每次請求過來之后,django都會優(yōu)先訪問緩存,看看緩存里面有沒有需要的數(shù)據(jù),如果沒有的話,再從數(shù)據(jù)庫里面取,緩存里面的數(shù)據(jù)都有超時時間,如果超時間的話就會從數(shù)據(jù)庫里面進(jìn)行更新,一般情況下緩存都是另外一臺機(jī)器的內(nèi)存,也可能放到文件等其他容易訪問的地方,django 里面可以直接調(diào)用緩存

緩存在內(nèi)存中

配置

CACHES = {
                'default': {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    'LOCATION': 'unique-snowflake',
    'TIMEOUT': 300,       
    'OPTIONS':{
            'MAX_ENTRIES': 300,          
            'CULL_FREQUENCY': 3,    
                    }
                }
            }
  • 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',就是這個類幫助我們?nèi)【彺婧蛯懢彺?/li>
  • 'LOCATION': 'unique-snowflake', 唯一的緩存變量
  • 'TIMEOUT': 300, 緩存超時時間(默認(rèn)300,None表示永不過期,0表示立即過期)
  • 'MAX_ENTRIES': 300, 最大緩存?zhèn)€數(shù)(默認(rèn)300)緩存?zhèn)€數(shù)不能是無線次的
  • 'CULL_FREQUENCY': 3, # 緩存到達(dá)最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,清空1/3即:1/CULL_FREQUENCY(默認(rèn)3)

應(yīng)用

裝飾器 @chche_page(緩存時間)

# 單獨視圖函數(shù):粒度適中
from django.views.decorators.cache import cache_page

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

緩存在文件中

配置

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'D:\cache', #緩存文件路徑
        'TIMEOUT': 300,     # 緩存超時時間(默認(rèn)300,None表示永不過期,0表示立即過期)
            'OPTIONS':{
                'MAX_ENTRIES': 300,   # 最大緩存?zhèn)€數(shù)(默認(rèn)300)
                'CULL_FREQUENCY': 3,     # 緩存到達(dá)最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
                    }
                }
            }

Memcache緩存

需要找一臺大內(nèi)存的及其然后安裝memcache軟件

鏈接那臺機(jī)器 。。。待續(xù)...

配置

CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
                    'LOCATION': '127.0.0.1:11211',
                    'TIMEOUT': 300,                                               # 緩存超時時間(默認(rèn)300,None表示永不過期,0表示立即過期)
                    'OPTIONS':{
                        'MAX_ENTRIES': 300,                                       # 最大緩存?zhèn)€數(shù)(默認(rèn)300)
                        'CULL_FREQUENCY': 3,                                      # 緩存到達(dá)最大個數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
                    }
                }
            }

應(yīng)用

粒度適中

加載哪個視圖函數(shù)中就在哪個視圖函數(shù)中應(yīng)用,裝飾器 @chche_page(緩存時間)

# 單獨視圖函數(shù):粒度適中
from django.views.decorators.cache import cache_page

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

全站緩存,粒度大

全站緩存可以使用中間件了

請求經(jīng)過一層層中間件到最后一個中間件的時候應(yīng)該進(jìn)入讀取緩存,第一次的時候沒有緩存,然后返回最后一個中間件,這時進(jìn)入視圖函數(shù)進(jìn)入數(shù)據(jù)庫取數(shù)據(jù),當(dāng)數(shù)據(jù)返回的時候數(shù)據(jù)從最后一個中間件開始經(jīng)過中間件直到返回到第一個中間件的時候?qū)?shù)據(jù)加載進(jìn)緩存并且給用戶

加中間件

MIDDLEWARE = [
  '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',
  'django.middleware.cache.FetchFromCacheMiddleware',  # 結(jié)束緩存中間件
                ]
CACHE_MIDDLEWARE_SECONDS = 5 # 設(shè)定緩存時間,優(yōu)先級比默認(rèn)高

局部緩存,粒度小

在HTML頁面中

{% load cache %}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Title</title>
  </head>
  <body>
    <h1>{{ ctime }}</h1>

    {% cache 5 'xxxxxfdfdf' %}    <!--5表示緩存時間,后面的key可以隨便寫-->
    <h1>{{ ctime }}</h1>
    {% endcache %}

  </body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容