轻松玩转django缓存

轻松玩转django缓存

(2007-03-30 16:00:03)
标签:

django

cache

压力

缓存

分类: 学习类
<!-- 正文开始 -->

  前言:

    因最近公司网站承受访问压力过大,经常导致页面报错,在研究django缓存时找了很多相关的资料,但没有见到有介绍django缓存从配置到实现再到实现机制介绍的文章,所以有了写这篇BLOG的想法,一来是可以加深自己对django缓存的理解,并作为学习笔记,二是可以给那些刚对django入门并想迫切在短时间内应用缓存功能的朋友们起到抛砖引玉的作用。

    以下篇章仅做为个人笔记之用,假如你不幸看到了本文,内容仅供参考,误人子弟的罪名实在太大,笔者可担当不起。。。

 配置cache方式及内部实现机制:

    django中cache大体分为三种,即针对全站的缓存配置、针对视图的缓存配置、针对数据的缓存配置。其中针对视图及数据的配置,大体都无需在settings.py中设置,唯独全站的缓存配置必须在settings.py中进行配置,且还有一点就是进行全站及视图缓存时要区分开匿名用户和已登陆用户的显示,详见以下的CACHE_MIDDLEWARE_ANONYMOUS_ONLY讲解。

 项目中的settings.py文件:

 MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.cache.CacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.doc.XViewMiddleware',
#    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'django.middleware.gzip.GZipMiddleware',
 )

    settings.py文件中的MIDDLEWARE_CLASSES添加'django.middleware.cache.CacheMiddleware'为启用全站缓存配置,此处的中间件排序位置很重要,必须要将此CacheMiddleware放在'django.contrib.sessions.middleware.SessionMiddleware',   'django.contrib.auth.middleware.AuthenticationMiddleware'之下,因为此处两个文件都会往request中写入相应的数据。此处针对配置全站缓存还必须指定默认的缓存时间CACHE_MIDDLEWARE_SECONDS值及CACHE_MIDDLEWARE_KEY_PREFIX值(可选)。

 CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True

    添加以上配置,此功能是配置全站缓存时有关匿名用户和登陆了的用户视图是否从缓存中读取并显示,如果是True,即登陆用户读的数据不会从缓存中读取。此选项针对视图进行缓存配置时同样奏效。


  实现cache的编码实现:


    针对全站缓存无需进行任何编码实现,针对试图及数据的缓存稍有区别,可能最具可观性的还算是针对数据的缓存,详见以下编码实现:

  针对数据编码实现:

  from django.core.cache import cache

  #存储缓存数据
  cache.set('cache_key',data,60*15)#cache_key为存储在缓存中的唯一值,data为存储的数据,60*15为缓存数据的时间

  #获取缓存数据
  cache.get('cache_key',None)#cache_key为储存缓存数据的唯一值


  针对视图编码实现:

  from django.views.decorators.cache import cache_page

  def BaCreate(request)
      ....
  BaCreate = cache_page(BaCreate,60*9)

    以上代码是在处理具体应用的代码中写入,如views.py中写入,在官方站点的文挡上还有另外一种方式及在方法前加上@cache_page(60 * 15),但这种方式还没调试成功,估计还需配置什么,或者版本不对。针对试图编码实现cache还有一种方式,就在urls.py中定义,这也是推荐的方式,详细定义如下:

  urls.py文件:

  from baindex
  from django.views.decorators.cache import cache_page

  (r'^ba/$', cache_page(baindex,1*60)),

    此处就定义了baindex方法所对应视图的缓存,至于为什么是做视图缓存所推荐的方式,这就留给你自己去想了。:)

    以上就是轻松玩转django缓存实现的全过程,至于你选择那种方式,就看你自己的应用了,但我还是推荐视图+数据进行缓存,当然视图只适合那些数据变动不大的页面,不过我想那些变动不大的页面估计基本上没有,就算页面正文没有变动,页面的其它模块估计也会要有相应的变动。不过现在不是流行起了Ajax吗?可能Ajax在这里能得到很好的应用。

    当然以上仅是cache的配置及实现过程,还有一点就是选择什么样的CACHE_BACKEND就不属这篇BLOG的内容了,不过要提醒下假如你用memcached的话,启动memcached记得指定IP地址,笔者就忽略了此处害得冤枉花费了一整天的时间。。

    最后还是谈谈djano关于全站缓存及视图缓存的机制,对于全站缓存我们完全可以将它看成是对全部视图进行缓存的实现,这也是笔者在调试中发现的,在调试中发现某个URL被请求后所储藏到cache中的key(唯一值)都是同一个。在django源文件中的utils/cache.py文件中有获取每个页面所被缓存的key为views.decorators.cache.cache_page.lzz./showbaposts/.d41d8cd98f00b204e9800998ecf8427e,其中共分为四段,注解为:views.decorators.cache.cache_page.(settings.py中的CACHE_MIDDLEWARE_KEY_PREFIX值).(每个请求的页面地址).(获取request中相关属性的md5编码值(调试时都为[])),还有一种key为'views.decorators.cache.cache_header.%s.%s' % (key_prefix, request.path),猜想功能是针对upstream 缓存和Vary headers的,对于这些也不展开研究了,详见django缓存的相应文档。至于视图缓存中数据的储存和获取的实现在django源文件下的views\middleware\cache.py文件中的process_request和process_response方法中。其在这里如果我们知道某个页面被缓存的key后,我们完全可以在后台写个小脚本用来实现针对某个页面的的数据来进行修改,这种应用就可以解决那些压力比较大的站点,至于怎么解决,就不展开谈了。。。

Python-Markdown库深度解析:从基础转换到Flask博客实战应用 Markdown作为一种轻量级标记语言,其核心价值在于将易读易写的纯文本转换为结构化的HTML,从而实现内容与样式的分离。其工作原理是通过一套简洁的符号语法定义标题、列表、代码块等元素,由解析器按照规则转换为对应的HTML标签。这一技术极大地简化了Web内容创作和文档编写的流程,提升了开发者和写作者的生产力。在Python生态中,程序化、自动化地处理Markdown文本是构建动态内容系统(如博客、CMS、API文档工具)的常见需求。Python-Markdown库正是为此而生,它不仅是一个高效的转换引擎,更 阅读详情

相关推荐

FastAPI:基于Python类型提示的高性能Web框架开发实践

在现代Web开发中,API框架的选择直接影响着开发效率和系统性能。Python作为主流后端语言,其Web框架生态丰富,从传统的Django、Flask到新兴的FastAPI,开发者面临着不同的技术选型。FastAPI的核心原理在于深度集成Python类型提示(Type Hints)和Pydantic数据验证,通过声明式编程自动生成OpenAPI文档,实现请求/响应的自动序列化与验证。这一设计带来的技术价值是双重的:一方面显著提升了开发速度,减少了手动编写验证逻辑和文档的时间;另一方面,基于Starlette

587

Django学习《玩转Django 2.0》PDF+代码分析

Python是当前热门的开发语言之一,它有着广泛的应用领域,在网络爬虫、Web开发、数据分析和人工智能等领域都受到开 发者的热爱和追捧。现在很多企业开始使用Python作为网站服务器的开发语言,因此掌握Web开发是Python开发者必不可少 的技能之一。 Django是Python开发网站的首选Web框架,这归功于Django较强的规范性,规范了开发人员的编码要求,以符合企业的规范化 管理。正因...

weixin_30929011的博客 2944

VSCode深度集成Python测试框架:unittest与pytest混合项目实战指南

单元测试是保障软件质量、提升开发效率的核心工程实践,其原理在于通过自动化脚本验证代码单元(如函数、类)的行为是否符合预期。在Python生态中,unittest作为标准库提供了基础的测试框架,而pytest凭借其简洁语法和强大插件生态,已成为现代Python测试的事实标准。两者的技术价值在于构建快速反馈的测试闭环,支撑持续集成与重构。在混合技术栈或遗留项目中,常需同时处理unittest与pytest测试用例。本文聚焦于在VSCode编辑器中对这两大测试框架进行深度集成与统一管理,涵盖测试发现、运行调试、性

weixin_30920853的博客 390

《玩转Django2.0》读书笔记-Django建站基础

                《玩转Django2.0》读书笔记-Django建站基础                                        作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任。       一.网站的定义及组成   网站(Website)是指在因特网上根据一定规则,使用HTML(标准通用标记语言下的一个应用)等工具制作并用于展示特定内容相关...

weixin_34234829的博客 827

从CTF实战到工程应用:HTTP请求头核心原理与安全攻防详解

HTTP请求头是HTTP协议的核心组成部分,它定义了客户端与服务器之间通信的元数据和行为规则。从原理上讲,请求头通过一系列预定义的字段,如Content-Type、Authorization、Cache-Control等,来协商内容格式、管理连接、控制缓存以及进行身份认证,是Web应用实现功能与安全的基础。其技术价值在于,它不仅是实现RESTful API、内容协商和性能优化的关键,更是Web安全攻防的前沿阵地。在应用场景上,无论是日常的API调试、爬虫开发,还是安全测试中的漏洞探测,对请求头的深入理解和操

weixin_30735745的博客 383

django-2.0

django-2.0安装软件,适用于32和64位版本,各位大神惠存

Linux系统之轻松搭建Django项目【玩转华为云】

Linux系统之轻松搭建Django项目【玩转华为云】

jks212454的博客 1114

django2.0入门必看 轻松升级Python实力派

django2.0入门必看 轻松升级Python实力派

Python Flickr API:轻松玩转Flickr的Python利器

Python Flickr API:轻松玩转Flickr的Python利器 项目介绍 Python Flickr API 是一个强大的Python库,旨在为开发者提供对Flickr API的全面访问。通过这个库,开发者可以轻松地与Flickr平台进行交互,无论是获取用户照片、上传图片,还是管理相册,都能通过简洁的Python代码实现。 项目技术分析 技术栈 Python: 项目完全基于Pytho...

gitblog_00428的博客 808

避坑指南:SpringBoot对接拉卡拉支付常见问题与解决方案(含SDK 1.0.6配置技巧)

本文是一份SpringBoot项目对接拉卡拉支付的实战避坑指南。针对SDK 1.0.6版本,详细剖析了从依赖管理、多环境配置、SDK初始化到支付请求构建、回调验签及生产监控的全流程常见问题,并提供了经过验证的解决方案与配置技巧,旨在帮助开发者高效、稳定地集成支付功能。

k5l6m的博客 332

libfacedetection 框架阅读及扩展经验

libfacedetection 框架源码解析与扩展心得1. libfacedetection 框架简介2. 源码解析2.1 facedetectcnn.h2.2 facedetectcnn.cpp2.3 facedetectcnn-model.cpp3. 其他层的扩展--depthwise convolution 前段时间因为工作需要,对libfacedetection框架做了些扩展,在阅读源...

weixin_42616332的博客 1500

基于springboot+vue的旅游小程序设计与实现(源码+lw+部署文档+讲解等)

基于 springboot+vue 的 “玩转巴中” 旅游小程序设计与实现是为了满足人们对巴中旅游的便捷化需求。在旅游市场日益繁荣的当下,一款专注于巴中地区的旅游小程序具有重要意义。该小程序结合 springboot 和 vue 技术,具备强大的功能。在界面设计上,vue 呈现出简洁美观、交互友好的风格,让用户轻松上手。小程序提供巴中地区丰富的旅游景点信息,包括景点介绍、图片展示、游客评价等,帮助用户快速了解各个景点特色。同时,还具备精准的地图导航功能,方便用户找到景点位置。对于美食推荐,详细介绍巴中当地的

专注于大学生项目实战开发,讲解,毕业答疑辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。全网粉丝30万+,优快云特邀博主,Java新星计划多届导师,掘金/知乎/华为云/阿里云/51CTO等平台优质创作者。 1119

基于Android平台下的健康管理APP/基于android的健康管理系统

随着网络科技的发展,移动智能终端逐渐走进人们的视线,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,关键应用程序的开发成为影响移动智能终端普及的重要因素,设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。Android技术作为当前最流行的操作平台,自然也存在着大量的应用服务需求。 本课题研究的是基于Android技术平台的健康管理APP,开发这款健康管理APP主要是为了帮助用户可以不用约束时间与地点进行所需信息。本文详细讲述了健康管理APP的界面设计及使用,主要包括界面的

m0_73706453的博客 1440

深入解析中间件:从洋葱圈模型到生产级日志与缓存设计

中间件是现代Web开发中处理请求和响应的核心架构模式,其本质是一种可插拔的流水线处理单元,通过解耦与复用实现灵活的功能扩展。其核心运行机制主要包括洋葱圈模型、管道过滤器模型和装饰器/钩子模型,分别适用于不同的框架与场景。在工程实践中,中间件的技术价值在于提升系统的可维护性、可观测性与性能。例如,通过设计健壮的日志中间件,可以集成请求ID与链路追踪,实现高效的异步日志记录与敏感信息脱敏;而可配置的缓存中间件则能有效降低数据库负载,提升响应速度。这些模式广泛应用于API网关、用户认证、限流及业务逻辑编排等场景,

weixin_30482181的博客 409

射频工程师必须了解的S参数四项要点

本文围绕单端 6 英寸走线的 S 参数展开深入分析,核心包含四项关键要点:低频下导线电学长度远小于信号波长,S11 呈大负分贝值、S21 接近 0 分贝;端口与走线的阻抗不匹配引发反射叠加,形成 S11 首个峰值(对应传输线四分之一波长频率);S21 相位可作为一致性检查依据,其 90° 相位差与 S11 峰值吻合;理想建模中 S11 峰值随频率上升因损耗下降,实际测量因连接器等阻抗不连续性,S11 会出现振荡上升。分析依托 Keysight ADS 工具与电磁求解器原理,为 S 参数解读提供科学支撑。

一只豌豆象的博客 1285

新手必看!华为S5700交换机健康检查清单:从CPU到日志的完整巡检流程

本文为新手网管人员提供华为S5700交换机的健康检查完整指南,涵盖CPU、内存、温度、日志等核心指标的日常维护流程。通过详细的display命令和实用案例,帮助用户快速掌握设备体检技巧,确保交换机稳定运行。

weixin_29251337的博客 238

python表单数据系统_python 网页提交表单数据库

如何创建和使用Python CGI脚本如何创建和使用Python CGI脚本你是否想使用Python语言创建一个网页,或者处理用户从web表单输入的数据?这些任务可以通过Python CGI(公用网关接口)脚本以及一个Apache web服务器实现。当用户请求一个指定URL或者和网页交互(比如点击""提交"按钮)的时候,CGI脚本...文章玄学酱2017-05-021065浏览量Django学习笔...

weixin_39626409的博客 1245

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

Rockyoung 8022

基于微信小程序的城市旅游平台的设计与实现源码+lw+部署文档+讲解等

本平台聚焦城市旅游“景点信息杂、行程规划难、本地服务缺”痛点,依托微信小程序免下载、轻操作的优势,构建集“景点查询-行程定制-服务预订-攻略分享”于一体的智慧旅游平台,为游客、景区商家及旅游从业者提供全流程支撑,打造“信息获取-行程规划-实地体验-分享反馈”的城市旅游服务闭环。 核心功能适配旅游全场景:游客端可按主题(历史、自然、网红)筛选景点,查看实时客流、开放时间及门票价格,在线预约购票;支持智能生成个性化行程,关联景点、交通、住宿信息,一键导航至目的地;还能查询本地美食、特色文创店,预订民宿或导游服务

1031

eNSP常见故障处理

eNSP无法启动设备一直停在#井号的问题的解决方案?

lvshiliang123的博客 2万+

升级conda时出现Malformed version string invalid chars错误解决方案

但有时,当你使用“conda upgrade”的命令时,你可能会遇到一个错误,提示你的环境解析失败,出现“Malformed version string invalid chars”错误消息。如果以上两个步骤都没有解决你的问题,那么你可以考虑更新conda的依赖项。如果你的conda版本已经是最新的,那么你需要清理conda的缓存。最后,如果以上方法都无法解决问题,你可以尝试使用pip进行更新。如果你的conda版本过旧,你需要先更新conda。首先,你需要确认你当前使用的conda版本。

BUG?不存在的! 1412

开源大模型一键部署实战:基于阿里云PAI快速玩转M3与K2.7 Code

大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在代码生成、智能对话等场景展现出巨大价值。随着模型开源生态的繁荣,如何高效部署和应用这些模型成为工程实践的关键。阿里云机器学习平台PAI提供的一键部署功能,正是为了解决模型服务化中的环境配置、资源管理和性能优化等工程难题。该平台通过集成vLLM等高效推理框架和提供标准化API,显著降低了MiniMax M3通用模型与Kimi K2.7 Code专用

weixin_30892763的博客 318

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Elastic:开发者上手指南

你们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2)Elasticsearch中的一些重要概念:cluster,n..........................................................

Elastic 中国社区官方博客 17万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Web服务器Globs与模式匹配:从核心原理到Nginx/Apache实战

模式匹配是计算机科学中处理字符串匹配的基础技术,其核心原理是通过特定规则(如通配符、正则表达式)高效识别目标字符串。在Web服务器领域,这一技术被广泛应用于路由分发和访问控制,直接决定了请求的处理路径与安全边界。通过Globs(如`*`、`?`、`[]`)和正则表达式,开发者可以灵活定义URL匹配规则,实现静态资源服务、动态请求路由及安全拦截。其技术价值在于提升服务器配置的灵活性与安全性,是构建高性能、高可靠Web服务的基石。在Nginx、Apache等主流服务器的配置中,模式匹配的优先级与实现细节直接影响

weixin_30463341的博客 320

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python游戏化实战:从零构建趣味项目,掌握核心编程技能

Python作为一门通用编程语言,其核心价值在于将抽象的逻辑思维转化为具体的可执行程序。理解其基础语法、面向对象编程和模块化设计原理,是构建任何应用的基础。在工程实践中,通过具体的、可交互的项目来驱动学习,能有效解决理论与实践脱节的问题,并维持持续学习的动力。游戏开发作为一种典型的应用场景,天然融合了事件驱动、状态管理和实时交互等关键技术概念,为初学者提供了直观的反馈和修改验证的闭环。本文以Python小游戏项目为例,深入讲解从环境搭建、代码理解、功能修改到打包发布的完整流程,特别适合已经掌握基础语法但缺乏

weixin_34025051的博客 482

并行分布式框架:Celery、rq、funboost

Celery是一个异步任务的调度工具,也可以叫做 "分布式任务队列(Distributed Task Queue)"。

freeking101的博客 5万+
上一篇: Django 缓存框架
下一篇: 浅谈契约式编程
hypercube2
博客等级 码龄18年 23粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值