Django中的快取(記憶體,檔案,redis)
阿新 • • 發佈:2018-12-16
一、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中設定幾個headerssetting.py'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
檢視函式編寫(快取所有檢視有效)
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", } } }