1. 程式人生 > >Django中的快取(記憶體,檔案,redis)

Django中的快取(記憶體,檔案,redis)

一、Django中的快取的幾種方法

1)單個檢視快取。時間測試

import time
from django.views.decorators.cache import cache_page
@cache_page(5)     # 快取5秒
def test_time(request):
    ctime=time.time()
    return HttpResponse(ctime)

在5秒內訪問的時間不變,該快取到了記憶體裡面

2)設定全域性快取

需要在settings新增中介軟體

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware’,    #第一 ,重寫了response的方法
'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', #最後,重寫了request的方法 ) “update” 必須配置在第一個 “fetch” 必須配置在最後一個

配置快取時間:CACHE_MIDDLEWARE_SECONDS=10

settings的示例

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',   #響應HttpResponse中設定幾個headers
    
'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware
', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', #用來快取通過GET和HEAD方法獲取的狀態碼為200的響應 ) CACHE_MIDDLEWARE_SECONDS=10
setting.py

檢視函式編寫(快取所有檢視有效)

import time
def test_time(request):
    ctime=time.time()
    return HttpResponse(ctime)

 3)模板層中的快取。只快取需要的內容。(關閉全域性快取)

html的編寫

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="/static/jquery-3.3.1.js"></script>
    <title>Title</title>
</head>
<body>
{% load cache %}

當前時間:{{ ctime }}
<hr>

{% cache 5 'time'%}
應用快取:{{ ctime }}
{% endcache %}

</body>

</html>
test.html

檢視編寫

import time
def test_time(request):
    ctime=time.time()
    return render(request,'test.html',locals())
View Code

 4)檔案中的快取。settings配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定快取使用的引擎
  'LOCATION': '/var/tmp/django_cache',        #指定快取的路徑
  'TIMEOUT':300,              #快取超時時間(預設為300秒,None表示永不過期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大快取記錄的數量(預設300)
   'CULL_FREQUENCY': 3,           # 快取到達最大個數之後,剔除快取個數的比例,即:1/CULL_FREQUENCY(預設3)
  }
 }   
}
CACBES

檢視編寫

import time
from django.views.decorators.cache import cache_page
@cache_page(5)
def test_time(request):
    ctime=time.time()
    return HttpResponse(ctime)
View Code

訪問會在配置的路徑下生成快取檔案

5)快取到redis中。

5.1)安裝 pip3 install django-redis

5.2)setting.py裡面進行配置

# redis配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}    # 連線池
            # "PASSWORD": "123",
        }
    }
}