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 相关文章推荐
python计算文本文件行数的方法
Jul 06 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
Python跨文件全局变量的实现方法示例
Dec 10 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
python 函数中的参数类型
Feb 11 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 Python
关于的python五子棋的算法
May 02 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
Ajax PHP分页演示
2007/01/02 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
如何通过python实现全排列
2020/02/11 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
python实现井字棋小游戏
2020/03/04 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
乌克兰设计师和品牌的服装:Love&Live
2020/04/14 全球购物
旅游网创业计划书
2014/01/31 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
保证书范文大全
2014/04/28 职场文书
ktv好的活动方案
2014/08/15 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP