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/
作者
Carlos
发布于
2018年9月12日
许可协议