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创建和删除目录的方法
Apr 29 Python
python队列queue模块详解
Apr 27 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
python的pygal模块绘制反正切函数图像方法
Jul 16 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
Django Celery异步任务队列的实现
Jul 24 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
Python ConfigParser模块的使用示例
Oct 12 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
python字典的元素访问实例详解
Jul 21 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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
javascript函数中的arguments参数
2010/08/01 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
python多线程并发实例及其优化
2019/06/27 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
基于PyTorch中view的用法说明
2021/03/03 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
市场营销职业生涯规划书范文
2014/01/12 职场文书
一夜的工作教学反思
2014/02/08 职场文书
质量承诺书范文
2014/03/27 职场文书
法律系毕业生求职信
2014/05/28 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python