【Django】缓存
缓存可以理解为一个URL到页面的映射。如果用户请求的URL已在缓存中则直接返回结果页面;否则生成页面,加入缓存并返回。
官方文档:https://docs.djangoproject.com/en/stable/topics/cache/
1.配置
设置文件中的CACHES
。
2.缓存类型
2.1 Memcached
基于内存的缓存(第三方库Memcached)。
2.2 数据库缓存
1
2
3
4
5
6
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
创建缓存表:
1
python manage.py createcachetable
2.3 文件缓存
1
2
3
4
5
6
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/path/to/django_cache',
}
}
2.4 本地内存缓存
1
2
3
4
5
6
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}
默认选项,其中LOCATION
用于区分多个本地内存缓存,如果只有一个则可省略。
3.缓存参数
TIMEOUT
:默认过期时间,单位为秒,默认为300,设置为None
表示永不过期,设置为0表示立即过期(不缓存)OPTIONS
:传递给缓存后端的选项MAX_ENTRIES
:最大条目数量,默认为300CULL_FREQUENCY
:达到最大条目数量时清理几分之一的最近最少使用条目,默认为3
例如:使用文件缓存后端,默认超时时间为60秒,最大条目为1000条
1
2
3
4
5
6
7
8
9
10
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT': 60,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
4.使用缓存
4.1 视图缓存
使用装饰器@cache_page
装饰视图函数,这将使用URL作为键,视图返回的响应作为值。
1
2
3
4
5
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
4.2 直接使用缓存API
访问缓存:
1
2
from django.core.cache import caches
cache = caches['default']
或直接
1
from django.core.cache import cache
基本用法:
cache.set(key, value, timeout=DEFAULT_TIMEOUT)
cache.get(key, default=None)
cache.has_key(key)
key in cache
cache.delete(key)
其中key
为字符串,value
为Python的picklable对象,timeout
单位为秒(将覆盖设置文件中的默认超时时间)。
完整方法可查看django.core.cache.backends.base.BaseCache
及其子类。
This post is licensed under CC BY 4.0 by the author.