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中类型检查的详细介绍
Feb 13 Python
python进行两个表格对比的方法
Jun 27 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
详解python实现交叉验证法与留出法
Jul 11 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
关于Tensorflow分布式并行策略
Feb 03 Python
python如何提取英语pdf内容并翻译
Mar 03 Python
python实现超级玛丽游戏
Mar 18 Python
django 扩展user用户字段inlines方式
Mar 30 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
如何使用Pytorch搭建模型
Oct 26 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
javascript实现校验文件上传控件实例
2015/04/20 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
Python3 入门教程 简单但比较不错
2009/11/29 Python
跟老齐学Python之复习if语句
2014/10/02 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
师生聚会感言
2014/01/26 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
实习护士自荐信
2015/03/25 职场文书
财务稽核岗位职责
2015/04/13 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript