当前位置: 首页 > news >正文

django性能优化缓存view详解

缓存提升性能:

  1、通常的view会去数据库端执行相关的查询然后交由template渲染、数据库访问通常就是性能的瓶颈所在。

  2、由于许多数据要很久才会变一次、两次连续的数据库访问通常返回的数据是一样的;更进一步数据是一样的、

  那就是说返回的response内容就是一样的。

  3、如果能直接把response缓存起来、减少对数据库的访问以提升性能、如果直接把response缓存在内存中、那么

  view性能的提升会更高。

 

怎么做:

  由上面的内容可能知道、要解决缓存访问,可以分解成两个更小的问题 a:缓存谁 & b缓存在哪里?

  缓存在哪里:

    这个可能通过配置来说明、缓存的内容是保存在内容中、还是保存在文件中 ... ...

  缓存谁:

    把想缓存的对象打上标记就行、这样它就和普通的对象区分开了 

 

以下用一个例子来说明缓存在django中的使用

 

配置缓存对象的保存位置:

在项目的settings.py文件中增加如下内容

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

  我打算把对象缓存到内存里

 

 

给view打上标记说明这个view是要缓存的

@cache_page(60 * 15, cache="default")
def index(request):
    print('this index ...')
    return render(request,'learning/index.html')

  @cache_page(60*15,cache="default") 的意思就是说缓存生命周期是15分钟、缓存中内存中(我们default配置的就是在内存中)

 

 

查看效果:

  1、第一次访问

   在server端可以看到如下日志

this index ...
[22/Mar/2018 12:59:01] "GET /learning/ HTTP/1.1" 200 2218
[22/Mar/2018 12:59:01] "GET /static/favicon.ico HTTP/1.1" 200 67646

  可以看到有打印“this index ...”说明这个view是有被执行的

 

  2、第二次访问页面、server端可以看到如下日志

 

this index ...
[22/Mar/2018 12:59:01] "GET /learning/ HTTP/1.1" 200 2218
[22/Mar/2018 12:59:01] "GET /static/favicon.ico HTTP/1.1" 200 67646
[22/Mar/2018 12:59:13] "GET /learning/ HTTP/1.1" 200 2218
[22/Mar/2018 12:59:13] "GET /static/favicon.ico HTTP/1.1" 200 67646

 

  这一次并没有打印"this index ..." 说明view并没有执行、django直接把之前执行view的结果返回给了浏览器。

 

 

 

 

----------------------------------------------------------------------------------------------

 

转载于:https://www.cnblogs.com/JiangLe/p/8622413.html

相关文章:

  • thymeleaf 引入js css 无效
  • 【JS第13期】变量、作用域、内存等问题
  • 在CentOS6.8下安装Docker
  • Codepen 每日精选(2018-3-25)
  • Laravel核心解读--Facades
  • 学习rsyslog总结
  • 中国电信携手 Orange Business Services 扩大战略合作 为企业提供无缝物联网体验
  • add_argument 图片路径
  • 组件化、模块化、集中式、分布式、服务化、面向服务的架构、微服务架构概念介绍...
  • spring @transactional 注解使用注意点
  • Python模块-time模块
  • Java并发编程(二)优势和风险
  • 聚焦2017中国网络安全年会
  • 电路中IC器件电压符号的解释
  • XVIII Open Cup named after E.V. Pankratiev. GP of Romania
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Angular 2 DI - IoC DI - 1
  • Angular Elements 及其运作原理
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Elasticsearch 参考指南(升级前重新索引)
  • JavaScript 一些 DOM 的知识点
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • JS字符串转数字方法总结
  • python大佬养成计划----difflib模块
  • swift基础之_对象 实例方法 对象方法。
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 仿天猫超市收藏抛物线动画工具库
  • 讲清楚之javascript作用域
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微服务框架lagom
  • 微信支付JSAPI,实测!终极方案
  • 携程小程序初体验
  • 一个JAVA程序员成长之路分享
  • 正则表达式
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ![CDATA[ ]] 是什么东东
  • # include “ “ 和 # include < >两者的区别
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • *2 echo、printf、mkdir命令的应用
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 成都线下面基会拉开序幕
  • .NET Standard 的管理策略
  • .net wcf memory gates checking failed
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET单元测试
  • /proc/vmstat 详解
  • [20150629]简单的加密连接.txt