1. 程式人生 > 實用技巧 >Django16-cache快取

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