Django16-cache快取
一、介紹
當用戶訪問某個url時,系統會嘗試多快取中查詢內容,如果快取中存在頁面內容,則直接返回快取中的頁面,如果快取中不存在,就需要通過後臺程式碼邏輯如資料庫查詢等,將生成的網頁內容儲存到快取中以備下一次使用,同時將網頁內容返回給使用者。
Django提供多種快取型別:Memcached快取,資料庫快取,檔案系統快取,區域性記憶體快取和自定義快取等。
'django.core.cache.backends.locmem.LocMemCache'
'django.core.cache.backends.memcached.MemcachedCache'
'django.core.cache.backends.db.DatabaseCache'
'django.core.cache.backends.filebased.FileBasedCache'
'django.core.cache.backends.dummy.DummyCache'
'django.core.cache.backends.memcached.PyLibMCCache'
官方資料
https://docs.djangoproject.com/en/3.1/topics/cache/
二、settins配置
1、Memcached
Memcached是Django支援的最快、最高效的快取型別,它是一種完全基於記憶體的快取伺服器,以減少資料庫的訪問並顯著提高網站的效能。
Memcached作為一個守護程序執行,並分配了一定數量的RAM。它提供一個快速的介面用於在快取中新增、檢索和刪除資料。所有資料都直接儲存在記憶體中,因此比資料庫或檔案系統儲存等基於硬碟的快取方式更快。
使用該快取型別要先安裝Memcached程式,並安裝Python與Memcached之間的介面庫,如python-memcached和pylibmc等。
安裝以後啟動Memcached,在django中用python-memcached連線。
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
2、資料庫快取
使用資料庫作為快取,會將快取的資料儲存在指定的表中,LOCATION為表名:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache','LOCATION': 'my_cache_table', } } 然後在資料庫中建立該表: python manage.py createcachetable
3、其他幾種快取方式可以檢視官方文件
三、Django也支援redis快取
https://github.com/jazzband/django-redis
1、安裝redis
pip install django-redis
2、配置settings檔案
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } }
如果redis需要使用者名稱密碼認證的話,有兩種寫法
第一種 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://username:[email protected]:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } 第二種 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://[email protected]:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "password" } } }
四、views配置
方式一:使用cache_page裝飾器實現快取,必須傳入一個timeout的位置引數
from django.views.decorators.cache import cache_page @cache_page(60) def user_list(request): users = models.User.objects.all() time.sleep(5) #模擬響應過程 return render(request, 'user_list.html', {'users': users})
方式二:手動配置快取資訊
from django.core.cache import cache def user_list(request): result = cache.get('devops_cache') if result: return HttpResponse(result) users = models.User.objects.all() time.sleep(5) res = render(request, 'user_list.html', {'users': users}) cache.set('devops_cache', res, timeout=60) return res