简单了解django缓存方式及配置


Posted in Python onJuly 19, 2019

前言

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,

1. 缓存的概述:

缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

2. Django中提供了6种缓存方式:

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

2.1 配置

开发调试

# 此为开始调试用,实际内部不做任何操作
 # 配置:
  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)
    },
    'KEY_PREFIX': '',            # 缓存key的前缀(默认空)
    'VERSION': 1,             # 缓存key的版本(默认1)
    'KEY_FUNCTION' 函数名           # 生成key的函数(默认函数会生成为:【前缀:版本: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

内存

# 此缓存将内容保存至内存的变量中
 # 配置:
  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',
   }
  }
 # 注:其他配置同开发调试版本

数据库

# 此缓存将内容保存至数据库

 # 配置:
  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',
   ]
  }
 }

Memcache缓存(pylibmc模块)

# 此缓存使用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',
   ]
  }
 }

Redis缓存(依赖:pip3 install django-redis)

from django_redis import get_redis_connection
conn = get_redis_connection("default")

2.2 应用

全站使用

使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存

 MIDDLEWARE = [
  'django.middleware.cache.UpdateCacheMiddleware',
  # 其他中间件...
  'django.middleware.cache.FetchFromCacheMiddleware',
 ]

 CACHE_MIDDLEWARE_ALIAS = ""
 CACHE_MIDDLEWARE_SECONDS = ""
 CACHE_MIDDLEWARE_KEY_PREFIX = ""

单独视图缓存

方式一:
  from django.views.decorators.cache import cache_page

  @cache_page(60 * 15)
  def my_view(request):
   ...

 方式二:
  from django.views.decorators.cache import cache_page

  urlpatterns = [
   url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
  ]

局部视图使用

a. 引入TemplateTag

  {% load cache %}

 b. 使用缓存

  {% cache 5000 缓存key %}
   缓存内容
  {% endcache %}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的并发编程实例
Jul 07 Python
Python实现把xml或xsl转换为html格式
Apr 08 Python
Python 的内置字符串方法小结
Mar 15 Python
Python+pandas计算数据相关系数的实例
Jul 03 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
浅析python的优势和不足之处
Nov 20 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
Python logging日志库空间不足问题解决
Sep 14 Python
详解Python函数print用法
Jun 18 Python
python使用BeautifulSoup 解析HTML
Apr 24 Python
python实现最小二乘法线性拟合
Jul 19 #Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 #Python
python如何实现数据的线性拟合
Jul 19 #Python
django获取from表单multiple-select的value和id的方法
Jul 19 #Python
django 信号调度机制详解
Jul 19 #Python
python傅里叶变换FFT绘制频谱图
Jul 19 #Python
Django forms表单 select下拉框的传值实例
Jul 19 #Python
You might like
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
Yii2 输出xml格式数据的方法
2016/05/03 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
python处理中文编码和判断编码示例
2014/02/26 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
教你学会使用Python正则表达式
2017/09/07 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
python 读取数据库并绘图的实例
2019/12/03 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
python 装饰器的使用示例
2020/10/10 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
求职者应聘的自我评价
2013/10/16 职场文书
数控技术专业推荐信
2013/11/01 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
英语道歉信范文
2014/01/09 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
导游词之湖北武当山
2019/09/23 职场文书