django缓存配置的几种方法详解


Posted in Python onJuly 16, 2018

为什么要用缓存?

首先说,为什么要用缓存的,由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时(时间可以设置),则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

另外,缓存只是一类统称,一般其介质是速度很快的内存,但也可以是能加快数据读取的其它方式。

什么时候适合用缓存?

对页面实时性要求不高的页面,可以用缓存。比如博客文章,假设用户一天更新一篇文章,那么可以为博客设置1天的缓存;一天后会刷新。另外像购物网站,商品的描述信息几乎不会变化,而商品的库存数量却要求根据用户的购买实时更新,因此也应该应用合适的缓存策略。

缓存的配置

配置缓存提供了6种方式。

  • 开发调试
  • 内存
  • 文件
  • 数据库
  • Memcache缓存(python-memcached模块)
  • Memcache缓存(pylibmc模块)

开发调试:

说明:此为开始调试用,实际内部不做任何操作

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎
  'TIMEOUT': 300,            # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,          # 最大缓存个数(默认300)
   'CULL_FREQUENCY': 3,          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3),3:表示1/3
  },
  #这边只的是缓存的key:p1:1:func_name
  'KEY_PREFIX': 'p1',            # 缓存key的前缀(默认空)
  'VERSION': 1,             # 缓存key的版本(默认1)
  'KEY_FUNCTION':"func_name"         # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
 }
}其他除了引擎不一样,其他的都是通用的,这边只的是缓存的key:p1:1:func_name的源码如下:所以我们就可以自定义这个key的格式。
# 自定义key
 def default_key_func(key, key_prefix, version):
  """
  Default function to generate keys.

  Constructs the key used by all other methods. By default it prepends
  the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
  function with custom key making behavior.
  """
  return '%s:%s:%s' % (key_prefix, version, key)

 def get_key_func(key_func):
  """
  Function to decide which key function to use.

  Defaults to ``default_key_func``.
  """
  if key_func is not None:
   if callable(key_func):
    return key_func
   else:
    return import_string(key_func)
  return default_key_func

内存:

注意是绝对位置(从根目录开始),必须保证服务器对你列出的路径具有读写权限

#'LOCATION': 'c:\foo\bar',#windows下的示例

说明:内存版本的时候,必须设置一个值,这个值是唯一的,此缓存将内容保存至内存的变量中

CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
   'LOCATION': 'unique-snowflake', #这边必须设置一个值,这个值是唯一的
  }
 #其他的配置和开发调试版本一样
}

文件:说明:此缓存将内容保存至文件

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
  'LOCATION': '/var/tmp/django_cache', #缓存存放的路径<br data-filtered="filtered">

 }
 #其他的配置和开发调试版本一样
}

数据库:说明:此缓存将内容保存至数据库

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
  'LOCATION': 'my_cache_table', # 设置一个数据库存放缓存的表名
 }
 #其他的配置和开发调试版本一样
}

# 注:执行创建表命令 python manage.py createcachetable

Memcache缓存(python-memcached模块)

说明:此缓存使用python-memcached模块连接memcache

#单台机器
CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
   'LOCATION': '127.0.0.1:11211',
  }
  #其他的配置和开发调试版本一样
}
 
#存放本地的
CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  'LOCATION': 'unix:/tmp/memcached.sock',
 }
 #其他的配置和开发调试版本一样
} 
 
#支持集群,负载均衡
CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  'LOCATION': [
   '172.19.26.240:11211',
   '172.19.26.242:11211',
   #设置权重
   #('172.19.26.240:11211',10),
   #('172.19.26.242:11211',20),
  ] 
 }
 #其他的配置和开发调试版本一样
}

Memcache缓存(pylibmc模块)

说明:此缓存使用pylibmc模块连接memcache

# 此缓存使用pylibmc模块连接memcache
  
 CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
   'LOCATION': '127.0.0.1:11211',
  }
 }
 
 CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
   'LOCATION': '/tmp/memcached.sock',
  }
 } 
 
 CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
   'LOCATION': [
    '172.19.26.240:11211',
    '172.19.26.242:11211',
   ]
  }
 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
pymongo实现控制mongodb中数字字段做加法的方法
Mar 26 Python
python中set常用操作汇总
Jun 30 Python
Python+django实现简单的文件上传
Aug 17 Python
Python做文本按行去重的实现方法
Oct 19 Python
Python守护线程用法实例
Jun 23 Python
Django中的Signal代码详解
Feb 05 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
Python pandas如何向excel添加数据
May 22 Python
什么是python的id函数
Jun 11 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
基于Python编写一个监控CPU的应用系统
Jun 25 Python
Python 字符串与数字输出方法
Jul 16 #Python
Django实战之用户认证(初始配置)
Jul 16 #Python
python format 格式化输出方法
Jul 16 #Python
Python合并多个Excel数据的方法
Jul 16 #Python
详解django.contirb.auth-认证
Jul 16 #Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 #Python
django认证系统实现自定义权限管理的方法
Jul 16 #Python
You might like
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
JS前端加密算法示例
2016/12/22 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
React实现轮播效果
2020/08/25 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
python删除文件示例分享
2014/01/28 Python
Python最长公共子串算法实例
2015/03/07 Python
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
学Python 3的理由和必要性
2019/11/19 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
《望洞庭》教学反思
2014/02/16 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python