官方中文链接地址:https://docs.djangoproject.com/en/2.0/topics/cache/
Django 官方关于cache的介绍:https://docs.djangoproject.com/en/dev/topics/cache/
记录一下django的缓存,用到是直接拿来,O(∩_∩)O
1、Memcached
在Django中使用Memcached:
- 设置
BACKEND
为django.core.cache.backends.memcached.MemcachedCache
或django.core.cache.backends.memcached.PyLibMCCache
(取决于您选择的memcached绑定) - 设置
LOCATION
为ip:port
值,其中ip
是Memcached守护程序的IP地址,port
是运行Memcached的端口,或者是unix:path
值,其中path
是Memcached Unix套接字文件的路径。
Memcached使用python-memcached
绑定在localhost(127.0.0.1)端口11211上运行的:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
在此示例中,Memcached可通过/tmp/memcached.sock
使用python-memcached
绑定的本地Unix套接字文件 获得:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
使用pylibmc
绑定时,请不要包含unix:/
前缀:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '/tmp/memcached.sock',
}
}
分布式缓存:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11212', '172.19.26.244:11213', ] } }
2、数据库缓存
将数据库表用作缓存:
- 设置
BACKEND
为django.core.cache.backends.db.DatabaseCache
- 设置
LOCATION
为tablename
,数据库表的名称。此名称可以是您想要的任何名称,只要它是一个尚未在您的数据库中使用的有效表名。
在此示例中,缓存表的名称为my_cache_table
:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
创建缓存表¶
在使用数据库缓存之前,必须使用以下命令创建缓存表:
python manage.py createcachetable
3、文件系统缓存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
windows环境:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': 'c:/django/tem/django_cache', } }
4、本地内存缓存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', } }
5、开发使用的缓存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', } }
缓存参数¶
可以为每个缓存后端提供额外的参数来控制缓存行为。这些参数作为设置中的附加键提供 CACHES
。有效参数如下:
-
TIMEOUT
:用于缓存的默认超时(以秒为单位)。此参数默认为300
秒(5分钟)。您可以设置TIMEOUT
为None
默认情况下缓存键永不过期。值0
使得键立即过期(实际上“不缓存”)。 -
OPTIONS
:应该传递给缓存后端的任何选项。有效选项列表将随每个后端而变化,由第三方库支持的缓存后端将直接将其选项传递给基础缓存库。实现自己的扑杀战略(即缓存后端
locmem
,filesystem
以及database
后端)将履行下列选项:-
MAX_ENTRIES
:删除旧值之前缓存中允许的最大条目数。此参数默认为300
。 -
CULL_FREQUENCY
:MAX_ENTRIES
达到时剔除的条目部分。实际比率是 ,设置为在达到时剔除一半条目。此参数应为整数,默认为。1 / CULL_FREQUENCY
CULL_FREQUENCY
2
MAX_ENTRIES
3
值
0
forCULL_FREQUENCY
表示在MAX_ENTRIES
到达时将转储整个缓存。在一些后端(database
尤其是)这使得扑杀多 以更高速缓存未命中的代价更快。
Memcached后端将
OPTIONS
as关键字参数的内容传递给客户端构造函数,从而允许对客户端行为进行更高级的控制。例如,请参见下文。 -
-
KEY_PREFIX
:一个字符串,将自动包含(默认情况下预先添加)到Django服务器使用的所有缓存键。 -
VERSION
:Django服务器生成的缓存键的默认版本号。 -
KEY_FUNCTION
包含函数的虚线路径的字符串,用于定义如何将前缀,版本和密钥组合为最终缓存键。
在此示例中,正在配置文件系统后端,超时为60秒,最大容量为1000个项目:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT': 60,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
以下是python-memcached
基于后端的示例配置,对象大小限制为2MB:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'OPTIONS': {
'server_max_value_length': 1024 * 1024 * 2,
}
}
}
以下是pylibmc
基于后端的示例配置,该后端支持二进制协议,SASL身份验证和ketama
行为模式:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
'OPTIONS': {
'binary': True,
'username': 'user',
'password': 'pass',
'behaviors': {
'ketama': True,
}
}
}
}
A:整个站点缓存:
在settings.py的中间件中加上django.middleware.cache.UpdateCacheMiddleware和
django.middleware.cache.FetchFromCacheMiddleware,这两个的位置不能变。
MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', ....... 'django.middleware.cache.FetchFromCacheMiddleware', ]
B:视图缓存
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request)
return render(request,'index.html')
cache参数可以设置使用CACHES中的哪一个cache系统,默认是default:
@cache_page
(
60
*
15
, cache
=
"special_cache"
)
def
my_view(request):
...
key_prefix参数和CACHE_MIDDLEWARE_KEY_PREFIX设置起得作用相同:
@cache_page
(
60
*
15
, key_prefix
=
"site1"
)
def
my_view(request):
...
可以在url中使用此方法:
from
django.views.decorators.cache
import
cache_page
urlpatterns
=
[
url(r
'^foo/([0-9]{1,2})/$'
, cache_page(
60
*
15
)(my_view)),
]
C:
模板片段缓存
{
%
load cache
%
}
{
%
cache
500
sidebar
%
}
.. sidebar ..
{
%
endcache
%
}