Django中的CACHE_BACKEND参数和站点级Cache设置


Posted in Python onJuly 23, 2015

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顺序。

然后,在你的Django settings文件里加入下面所需的设置:

  •     CACHE_MIDDLEWARE_SECONDS :每个页面应该被缓存的秒数。
  •     CACHE_MIDDLEWARE_KEY_PREFIX :如果缓存被多个使用相同Django安装的网站所共享,那么把这个值设成当前网站名,或其他能代表这个Django实例的唯一字符串,以避免key发生冲突。 如果你不在意的话可以设成空字符串。

缓存中间件缓存每个没有GET或者POST参数的页面。 或者,如果CACHE_MIDDLEWARE_ANONYMOUS_ONLY设置为True,只有匿名请求(即不是由登录的用户)将被缓存。 如果想取消用户相关页面(user-specific pages)的缓存,例如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装饰器)。

Python 相关文章推荐
python提取内容关键词的方法
Mar 16 Python
整理Python最基本的操作字典的方法
Apr 24 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
Python3中bytes类型转换为str类型
Sep 27 Python
python3的输入方式及多组输入方法
Oct 17 Python
Python3标准库总结
Feb 19 Python
Django框架首页和登录页分离操作示例
May 28 Python
用pycharm开发django项目示例代码
Jun 13 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
python 写一个水果忍者游戏
Jan 13 Python
简介Django框架中可使用的各类缓存
Jul 23 #Python
浅析Python的Django框架中的Memcached
Jul 23 #Python
详解Django中的权限和组以及消息
Jul 23 #Python
在Django的模板中使用认证数据的方法
Jul 23 #Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 #Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 #Python
在Django中限制已登录用户的访问的方法
Jul 23 #Python
You might like
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php仿discuz分页效果代码
2008/10/02 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
JS 常用校验函数
2009/03/26 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
深入学习python的yield和generator
2016/03/10 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
详解Python多线程
2016/11/14 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python单元测试简单示例
2018/07/03 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python自定义一个异常类的方法
2019/06/27 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python是怎么被发明的
2020/06/15 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
致标枪运动员广播稿
2014/02/06 职场文书
酒店节能降耗方案
2014/05/08 职场文书
疾病捐款倡议书
2014/05/13 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
简历自荐信范文
2015/03/09 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
九年级英语教学反思
2016/02/15 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python