Django中的CACHE_BACKEND参数和站点级Cache设置
CACHE_BACKEND参数
每个缓存后端都可能使用参数。它们在CACHE_BACKEND设置中以查询字符串形式给出。有效参数如下:
- timeout:用于缓存的过期时间,以秒为单位。这个参数默认被设置为300秒(五分钟)。
- max_entries:对于内存,文件系统和数据库后端,高速缓存允许的最大条目数,超出这个数则旧值将被删除。这个参数默认是300。
- cull_percentage:当达到max_entries的时候,被删除的条目比率。实际的比率是1/cull_percentage,所以设置cull_frequency=2就是在达到max_entries的时候去除一半数量的缓存。
把cull_frequency的值设置为0意味着当达到max_entries时,缓存将被清空。这将以很多缓存丢失为代价,大大提高接受访问的速度。
在这个例子中,timeout被设成60
CACHE_BACKEND="memcached://127.0.0.1:11211/?timeout=60"
而在这个例子中,timeout设为30而max_entries为400:
CACHE_BACKEND="locmem:///?timeout=30&max_entries=400"
其中,非法的参数与非法的参数值都将被忽略。
站点级Cache
一旦高速缓存设置,最简单的方法是使用缓存缓存整个网站。您需要添加'django.middleware.cache.UpdateCacheMiddleware'和‘django.middleware.cache.FetchFromCacheMiddleware'到您的MIDDLEWARE_CLASSES设置中,在这个例子中是:
MIDDLEWARE_CLASSES=( 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', )
注意:
不,这里并没有排版错误:修改的中间件,必须放在列表的开始位置,而fectch中间件,必须放在最后。细节有点费解,如果您想了解完整内幕请参看下面的MIDDLEWARE_CLASSES顺序。
然后,在你的Djangosettings文件里加入下面所需的设置:
- CACHE_MIDDLEWARE_SECONDS:每个页面应该被缓存的秒数。
- CACHE_MIDDLEWARE_KEY_PREFIX:如果缓存被多个使用相同Django安装的网站所共享,那么把这个值设成当前网站名,或其他能代表这个Django实例的唯一字符串,以避免key发生冲突。如果你不在意的话可以设成空字符串。
缓存中间件缓存每个没有GET或者POST参数的页面。或者,如果CACHE_MIDDLEWARE_ANONYMOUS_ONLY设置为True,只有匿名请求(即不是由登录的用户)将被缓存。如果想取消用户相关页面(user-specificpages)的缓存,例如Djangos的管理界面,这是一种既简单又有效的方法。CACHE_MIDDLEWARE_ANONYMOUS_ONLY,你应该确保你已经启动AuthenticationMiddleware。
此外,缓存中间件为每个HttpResponse自动设置了几个头部信息:
- 当一个新(没缓存的)版本的页面被请求时设置Last-Modified头部为当前日期/时间。
- 设置Expires头部为当前日期/时间加上定义的CACHE_MIDDLEWARE_SECONDS。
- 设置Cache-Control头部来给页面一个最长的有效期,值来自于CACHE_MIDDLEWARE_SECONDS设置。
如果视图设置自己的缓存到期时间(即它有一个最大年龄在头部信息的Cache-Control中),那么页面将缓存直到过期,而不是CACHE_MIDDLEWARE_SECONDS。使用django.views.decorators.cache装饰器,您可以轻松地设置视图的到期时间(使用cache_control装饰器)或禁用缓存视图(使用never_cache装饰器)。