19.Django缓存

Django是一个web框架,通常使用来出来数据然后展示给用户的,但是每次数据都从数据库查询,或多或少会影响 效率,为了解决这个问题,Django也引入了缓存。

缓存:
对于用户的请求先从某个获取比较快的地方获取(内存、文件),如果获取到直接返回,没有获取到再由程序处理,然后返回给用户 ,并且将其放入到缓存中,供下次快速获取。

Django默认使用内存缓存
setting.py

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

由于内存有限,不能将多有的东西都放置到这里,所以一般都是将频繁使用的放内存中。

支持的缓存框架(没有内置redis的缓存):

'django.core.cache.backends.db.DatabaseCache'
'django.core.cache.backends.dummy.DummyCache'
'django.core.cache.backends.filebased.FileBasedCache'
'django.core.cache.backends.locmem.LocMemCache'
'django.core.cache.backends.memcached.MemcachedCache'
'django.core.cache.backends.memcached.PyLibMCCache'

文件缓存:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/my_cache', # 放置缓存的目录
        'TIMEOUT': 15 * 60, # 缓存时间 秒
        'OPTIONS': {
            'MAX_ENTRIES': 1000 # 最大数量
        }
    }
}

memcache缓存设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

数据库缓存:

python manage.py createcachetable cache_table_name # cache_table_name表名
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'cache_table_name', # 表名
        'TIMEOUT': 15*60,
        'OPTIONS': {
            'MAX_ENTRIES': 2000
        }
    }
}

设置需要缓存的视图

views.py中的修改

from django.shortcuts import render
from django.views.decorators.cache import cache_page


@cache_page(15 * 60) # 单位秒
def index(request):
    '''
        流程:
            1.从缓存获取,获取到返回给用户
            2.获取不到,从数据库查询,反回给用户
            4.将内容放置到缓存
    '''
    return render(request, 'index.html')

也可以在urls.py中设置,和上面的是一样的

from django.contrib import admin
from django.urls import path

from django.views.decorators.cache import cache_page
from myapp.views import index
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', cache_page(15)(index)),
]
声明:原创文章,版权所有,转载请注明出处,https://litets.com。