由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

Django提供了6中缓存方式:
1.开发调试  ----> 摆设,没有缓存功效
2.内存 
3.文件
4.数据库
5.Memcache缓存(python-memcacahed模块)(主流)
6.Memcache缓存(pylibmc模块)
3中应用方式
全局应用
单个视图函数
模板应用
什么是Memcache
MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言
缓存方式
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】)
            }}# 自定义keydef default_key_func(key, key_prefix, version):"""Default function to generate keys.Constructs the key used by all other methods. By default it prependsthe `key_prefix'. KEY_FUNCTION can be used to specify an alternatefunction 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_funcelse:return import_string(key_func)return default_key_func

View Code

2.内存

# 此缓存将内容保存至内存的变量中# 配置:CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache','LOCATION': 'unique-snowflake',}}# 注:其他配置同开发调试版本

View Code

3.文件

# 此缓存将内容保存至文件# 配置:CACHES = {'default': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache','LOCATION': '/var/tmp/django_cache',#'LOCATION': 'os.path.join(BASE_DIR,'cache')',
            }}# 注:其他配置同开发调试版本

View Code

4.数据库

# 此缓存将内容保存至数据库# 配置:CACHES = {'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache','LOCATION': 'my_cache_table', # 数据库表
            }}# 注:执行创建表命令 python manage.py createcachetable

View Code

5.Memcache缓存(python-memcacahed模块)

# 此缓存使用python-memcached模块连接memcacheCACHES = {'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',   #memcache中缓存数可能分配不均衡,在这里还可以调节权重 ('172.19.26.240:11211',10)'172.19.26.242:11211',   #memcache中缓存数可能分配不均衡,在这里还可以调节权重 ('172.19.26.240:11211',11)
            ]}}

View Code

6.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',]}}

View Code

缓存应用

1.全局应用

全站使用使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存MIDDLEWARE = ['django.middleware.cache.UpdateCacheMiddleware',            #判断返回的字符串是否在缓存中已经存在,存在则不处理。不存储则更新一下缓存,增添新缓存# 其他中间件...                                                                        'django.middleware.cache.FetchFromCacheMiddleware',       #缓存匹配在这里,如果有直接返回,没有就必须到后台处理
    ]UpdateCacheMiddleware            ----->     处理函数为process_responseFetchFromCacheMiddleware           ----->     处理函数为process_request

View Code

2.单独视图应用

方式一:from django.views.decorators.cache import cache_page@cache_page(60 * 15)def my_view(request):...
方式二:from django.views.decorators.cache import cache_pageurlpatterns = [url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),]

View Code

3.局部视图使用缓存

引入TemplateTag{% load cache %}使用缓存{% cache 5000 key %}    5000S秒后超时    key = 前缀+版本 (命名)  测试自定即可缓存内容{% endcache %}

View Code

如果三个应用都使用,那么只有全站生效
Django不能实现,后台数据更新,缓存同步更新。只能自己写程序实现

转载于:https://www.cnblogs.com/cq146637/p/7819333.html

Django学习-19-缓存相关推荐

  1. Django学习笔记(下)

    文章目录 18 Template概念 19 模版语法 19.1 变量 19.2 点语法 19.3 标签 20 常见的请求状态码 21 view视图函数 21.1 概念及基础语法 21.2 内置函数 2 ...

  2. Django介绍和虚拟环境(django特点、MVC、MVT、Django学习资料)

    MVT流程: 创建Django项目和应用 django-admin startproject name python manager.py startapp name 视图和ULR 视图的请求和响应 ...

  3. django 学习笔记

    django 学习笔记 启动虚拟机: workon bj18_py3 创建一个项目: django-admin.py startproject mysite 启动开发用服务器:从外层项目 mysite ...

  4. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)(一)

    阅读目录 一.Django中的缓存: 前戏: Django中的几种缓存方式: Django中的缓存应用: 二.跨域: 跨域知识介绍: CORS请求分类(简单请求和非简单请求) 示例: 三.自动生成接口 ...

  5. 【python】-- Django 中间件、缓存、信号

    Django  中间件.缓存.信号 一. Django  中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的 ...

  6. django学习笔记03

    原创博客地址:django学习笔记03 第一章,模型层 查询集API 一.QuerySet何时被提交 迭代 QuerySet是可迭代的,在首次迭代查询集时执行实际的数据库查询 切片:如果使用切片的&q ...

  7. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  8. django学习笔记01

    原创博客地址:django学习笔记01 基于教程,刘江的博客教程Django教程:https://www.liujiangblog.com/course/django/87 第一章:模型层 1.1 模 ...

  9. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  10. 面向深度学习的缓存替换算法

    面向深度学习的缓存替换算法 摘要:本文针对深度学习的落地痛点进行了分析并提出通过改善高速缓存替换算法的方式来提升深度学习的落地能力.具体而言,我们从降低能耗.存储介质材料.降低算法实现难度.综合考虑各 ...

最新文章

  1. Citrix Avalon安装实验手册之一----Avalon概述及实验环境准备
  2. 利用XRDP远程登陆linux系统
  3. python流程控制-详解Python流程控制语句
  4. 基于Boost::beast模块的同步WebSocket服务器
  5. Windows 程序设计技巧
  6. C/C++知识分享:C++常用内置函数你会几个,使用过几次呢?
  7. 在列表中根据条件来筛选数据
  8. 内存占用小的手机输入法_华为手机输入法中6个超实用的小技巧,你没用过就太可惜了!...
  9. cv2保存和读取中文路径
  10. win10远程桌面查看对方计算机名,详细教你win10远程桌面连接命令
  11. node中封装MongoDB
  12. Vb自动读取本地HTML,VB读取网页内容 方法汇总 - mystic的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  13. cc域名转入可以吗?其特点是什么?
  14. js MessageBox 类 无插件,支持弹出层(原页面div 或者 div代码),消息框(alert confirm)
  15. 拯救电脑族的营养美食
  16. 钢筋穿入女子太阳穴 消防及时破拆将其营救
  17. 【系统集成项目管理工程师】信息系统集成及服务
  18. 嵌入式linux学习笔记--TCP通讯整理
  19. 单芯片如何实现升压和降压?
  20. 读保哥《ASP.NET MVC2开发实战》第二回(Model)

热门文章

  1. 信息抽取 | 72篇论文梳理:涉及NER、复杂关系、小样本、文档级、多模态、开放域抽取...
  2. 综述 | 注意力机制
  3. 赛尔笔记 | 通用领域条件性知识图谱数据集
  4. 介绍4个大神常用而你不常用的python函数--assert,map,filter,reduce
  5. 微软亚洲研究院:NLP将迎来黄金十年
  6. 每日算法系列【LeetCode 289】生命游戏
  7. [NAACL19]基于DIORA的无监督隐式句法树归纳
  8. PyTorch学习—19.模型的加载与保存(序列化与反序列化)
  9. 3.2 决策树可视化
  10. 时间序列-ARIMA模型调参检验实战