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 Web框架Flask信号机制(signals)介绍
Jan 01 Python
Python itertools模块详解
May 09 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
Dec 10 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
python__name__原理及用法详解
Nov 02 Python
np.random.seed() 的使用详解
Jan 14 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
Python 如何在字符串中插入变量
Aug 01 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
WordPress网站性能优化指南
2015/11/18 PHP
JS 判断代码全收集
2009/04/28 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
Python入门篇之函数
2014/10/20 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
python定义类的简单用法
2020/07/24 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
投标单位介绍信
2014/01/09 职场文书
自立自强的名人事例
2014/02/10 职场文书
药品业务员岗位职责
2014/04/17 职场文书
交通事故和解协议书
2014/09/25 职场文书
2014个人年度工作总结
2014/12/15 职场文书
给老婆的检讨书
2015/01/27 职场文书
2015年采购员工作总结
2015/04/27 职场文书
李强为自己工作观后感
2015/06/11 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android