Django缓存机制
Django支持基于数据库的、文件的和内存的缓存。通常我们首先要对其进行设置。Django关于缓存的设置都位于settings.py中的CACHES配置项中。
1.使用memcached缓存
需要安装python-memcached
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
分布式的memcached
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'1.1.1.1:11211',
'1.1.1.2:11211',
'1.1.1.3:11211',
]
}
}
2.使用文件作为缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
3.使用本地内存作为缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}
4.使用redis作为缓存
pip install django-redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.redisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "mysecret"
}
}
}
session使用redis缓存
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
缓存参数
上述每一个缓存后端都可以设置一些额外的参数来控制缓存行为,可以设置的参数如下:
- TIMEOUT
缓存的默认过期时间,以秒为单位,默认是300秒None表示永远不会过期。设置成0将造成缓存立即失效(缓存就没有意义了)。
- OPTIONS
可选参数,根据缓存后端的不同而不同。
- KEY_PREFIX
Django服务器使用的所有缓存键的字符串。
- VERSION
由Django服务器生成的默认版本号。
- KEY_FUNCTION
一个字符串,其中包含一个函数的点路径,该函数定义了如何将前缀,版本和密钥组合成最终缓存密钥。 下面例子中配置了一个基于文件系统的缓存后端,缓存过期时间被设置为60秒,最大条目为1000.
'TIMEOUT': 60,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
如果要全站缓存需要加入如下内容
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
CACHE_MIDDLEWARE_ALIAS : 用于存储的缓存的别名
CACHE_MIDDLEWARE_SECONDS : 每个page需要被缓存多少秒.
CACHE_MIDDLEWARE_KEY_PREFIX : 密钥前缀
视图页面缓存
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
cache_page
接受一个参数:timeout,秒为单位。在上例中,my_view()
视图的结果将被缓存15分钟(为了提高可读性写成了60 * 15)
缓存模板
{% load cache %}
{% cache 500 sidebar %}
.. sidebar ..
{% endcache %}
使用cache
模板标签来缓存模板的一个片段。要使用这个标签,首先要在模版的顶部位置添加{% load cache %}
。 模板标签{% cache %}
将在设定的时间内,缓存标签块中包含的内容。它最少需要两个参数:缓存时间(以秒为单位)以及给缓存片段起的名称。
Django缓存机制
http://www.jcwit.com/article/270/