Django缓存

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,若某个时间内再次发生同一个请求,则不再去执行请求响应过程,而直接从内存或高速缓存系统中获取该请求的响应内容返回给用户。

Django提供了5种不同的缓存方式:

  • Memcached:高性能的分布式内存对象缓存系统,用于动态网站,以减轻数据库负载。使用Memcache需要安装系统服务器,适合超大型网站使用。

  • 数据库缓存:缓存信息存储在网站数据库的缓存表中,缓存表可以在项目的配置文件中配置,适合大中型网站使用。

  • 文件系统缓存:缓存信息以文本文件格式保存,适合中小型网站使用。

  • 本地内存缓存:Django默认的缓存保存方式,只适用于项目开发测试。

  • 虚拟缓存:Django内置的虚拟缓存,实际上只提供缓存接口,并不能储存缓存数据,只用于开发测试。

缓存可以用在四个地方:全站缓存、路由缓存、视图缓存、模板缓存

缓存配置

数据库缓存

#BACKEND用于配置缓存引擎,LOCATION用于数据表的命名
CACHES = {
    'default':{
		# 配置缓存引擎        
        'BACKEND':'django.core.cache.backends.db.DatabaseCache',
        # 数据表的命名
        'LOCATION':'my_cache_table',
        #设置缓存期限,以秒为单位,若为None,则永不过期
        'TIMEOUT':60,
        'OPTIONS':{
        #代表最大缓存记录数量
        'MAX_ENTRIES': 1000,
        #当缓存达到最大数量后,剔除缓存的数量
        'CULL_FREOUENCY':3
}
    }
}
#缓存数据表的生成依赖于配置文件中DATABASES的配置信息,如果DATABASES配置了多个数据库,那么缓存数据表默认在DATABASES 的default的数据库中生成
#创建数据表
python manage.py createcachetable

文件缓存

文件系统缓存将缓存数据以文本文件的形式存储在服务器的文件系统上。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/path/to/your/cache/directory',  # 指定缓存文件存放的目录
    }
}

本地缓存

默认情况下,Django已经配置好了本地内存缓存:

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

虚拟缓存

Django的虚拟缓存实际上不执行任何缓存操作,仅提供一个缓存接口,用于开发和测试阶段,确保缓存逻辑正确,而无需实际缓存数据。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

缓存的使用

全站缓存

启用Django的缓存中间件来实现全站缓存。在MIDDLEWARE设置中添加django.middleware.cache.UpdateCacheMiddlewaredjango.middleware.cache.FetchFromCacheMiddleware,确保它们的顺序正确,一般位于其他中间件的起始和末尾:

MIDDLEWARE = [
    # ...
    'django.middleware.cache.UpdateCacheMiddleware',  # 应放在其他中间件之前
    # 其他中间件...
    'django.middleware.cache.FetchFromCacheMiddleware',  # 应放在其他中间件之后
]
#设置缓存生命周期
CACHE_MIDDLEWARE_SECONDS = 15
#属性值来自缓存配置CACHES的default
#
CACHE_MIDDLEWARE_ALIAS = 'default'
#设置缓存cache_key字段
#用同一个Django项目多个站点之间共享缓存
CACHE_MIDDLEWARE_KEY_PREFIX = 'MyDjango'

CACHE_MIDDLEWARE_SECONDS 设置缓存的生命周期。若在视图、路由和模板中使用缓存并设置生命周期属性 TIMEOUT,则优先选择CACHE_MIDDLEWARE_SECONDS。

CACHE_MIDDLEWARE_ALIAS 设置缓存的保存路径,默认为default。如果缓存配置CACHES中设置多种缓存方式,没有设置缓存的保存路径,就默认保存在缓存配置CACHES的 default 的配置信息中。

CACHE_MIDDLEWARE_KEY_PREFIX指定某个Django站点的名称。在一些大型网站中都会采用分布式站点实现负载均衡,这是将同一个Django项目部署在多个服务器上,当网站访问量过大的时候,可以将访问量分散到各个服务器,提高网站的整体性能。如果多个服务器使用共享缓存,那么该属性是为了区分各个服务器的缓存数据,这样每个服务器只能使用自己的缓存数据。

具体的表名以配置为准,下图只是展示例子

视图缓存

from django.shortcuts import render
from django.views.decorators.cache import cache_page
# cache与全站缓存CACHE_MIDDLEWARE_ALIAS相同
# key_prefix与全站缓存CACHE_MIDDLEWARE_KEY_PREFIX相同
@cache_page(10, cache='default', key_prefix='myview')
def index(request):
    return render(request,"index.html")
#缓存方法
from django.core.cache import cache
 # 将数据添加到缓存中,如果键已存在,则不进行任何操作默认只缓存5分钟
    cache.add(key, value)
 # 尝试从缓存中获取键的值
    value = cache.get(key)
 # 从缓存中删除指定的键
    cache.delete(key)
 # 清空所有缓存
    cache.clear()

 具体的表名以配置为准,下图只是展示例子

路由缓存

urlpatterns = [
    # 将'my_view'视图的输出缓存60秒
    path('my_view/', cache_page(60,cache='MyDjango',key_prefix='MyURL')(views.my_view), name='my_view'),
    # 其他URL配置...
]

 具体的表名以配置为准,下图只是展示例子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/680431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++设计模式-策略模式,AI角色动态选择行为

运行在VS2022,x86,Debug下。 27. 策略模式 策略模式让算法的选择与使用独立开来,使得代码更灵活、可扩展和易维护。应用:如在游戏开发中,AI角色需要根据环境和条件做出不同的行为,如寻路、攻击、躲避等。可…

【优选算法】栈 {何时使用栈结构?后缀表达式求值;中缀转后缀表达式;中缀表达式求值}

一、经验总结 何时使用栈结构解题? 做过相似的使用栈结构解得的题目嵌套处理:在从前向后处理的过程中,由于之后内容的不确定性而导致当前操作不能贸然进行,需要先进行保存,直到遇到区间结束标志(如’)&am…

2024年船舶、机械制造与海洋科学国际会议(ICSEMMS2024)

2024年船舶、机械制造与海洋科学国际会议(ICSEMMS2024) 会议简介 我们诚挚邀请您参加将在重庆隆重举行的2024年国际造船、机械制造和海洋科学大会(ICSEMMS024)。作为一项跨学科和跨学科的活动,本次会议旨在促进造船…

PostgreSQL专家(pcp51)--王丁丁

#PostgreSQL培训 #postgresql认证 #postgreSQL考试 #PG考试 #PG培训

【Python系列】Python装饰器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【实战JVM】-实战篇-06-GC调优

文章目录 1 GC调优概述1.1 调优指标1.1.1 吞吐量1.1.2 延迟1.1.3 内存使用量 2 GC调优方法2.1 发现问题2.1.1 jstat工具2.1.2 visualvm插件2.1.3 PrometheusGrafana2.1.4 GC Viewer2.1.5 GCeasy 2.2 常见GC模式2.2.1 正常情况2.2.2 缓存对象过多2.2.3 内存泄漏2.2.4 持续FullGC…

【全开源】小区入户安检系统(FastAdmin + Uni-APP)

守护家的每一道防线 一款基于FastAdmin Uni-APP开发的小区入户安检系统(前端可发布为小程序、H5、App)。可针对不同行业自定义安检项目,线下安检,线上留存(安检拍照/录像),提高安检人员安检效率。 一、引言&#xff…

NLP(1)-TF-IDF算法介绍

一、TF-IDF算法介绍 TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。 TF-IDF是一…

升级HarmonyOS 4.2,开启健康生活篇章

夏日来临,华为智能手表携 HarmonyOS 4.2 版本邀您体验,它不仅可以作为时尚单品搭配夏日绚丽服饰,还能充当你的健康管家,从而更了解自己的身体,开启智能健康生活篇章。 高血糖风险评估优化,健康监测更精准 …

Java面向对象笔记

多态 一种类型的变量可以引用多种实际类型的对象 如 package ooplearn;public class Test {public static void main(String[] args) {Animal[] animals new Animal[2];animals[0] new Dog();animals[1] new Cat();for (Animal animal : animals){animal.eat();}} }class …

html 使用svg矢量图时无法 调整宽高问题解决,不能像图片一样设置宽高比例问题

引入的路径后加 #svgView(preserveAspectRatio(none)) 具体代码如下 修改前 <img src"/assets/svgs/full_screen_full.svg" class"im"> 修改后 <img src"/assets/svgs/full_screen_full.svg#svgView(preserveAspectRatio(none))" cla…

前端处理流式数据(SSE服务)

前言 将数据用流的方式返回给客户端,这种技术需求在传统的管理项目中不多见,但是在媒体或者有实时消息等功能上就会用到,这个知识点对于前端还是很重要的。 即时你不写服务端,但是服务端如果给你这样的接口,你也得知道怎么去使用联调。 nodejs实现简单的SSE服务 SSE服务(Se…

Java:流程控制语句

文章目录 一、顺序结构二、分支结构2.1 if2.2 switch 三、循环结构3.1 for3.2 while3.3 do...while 四、流程控制4.1 break4.2 continue 五、结语 一、顺序结构 顺序结构语句是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 二、分支结…

宏集Panorama SCADA:个性化定制,满足多元角色需求

前言 在考虑不同人员在企业中的职能和职责时&#xff0c;他们对于SCADA系统的需求可能因其角色和工作职责的不同而有所差异。在SCADA系统的设计和实施过程中&#xff0c;必须充分考虑和解决这种差异性。 为了满足不同人员的需求, 宏集Panorama SCADA平台具备灵活的功能和定制…

新书速览|Python Django 4构建动态网站的16堂课

Python Django 4构建动态网站的16堂课 本书内容 《Python Django 4构建动态网站的16堂课》是一本关于Django框架的网站开发入门教材&#xff0c;适合想要学习并掌握Django框架的开发人员阅读。《Python Django 4构建动态网站的16堂课》共分16课&#xff0c;内容包括网站开发环境…

影响指挥中心操作台的材质选择的因素有哪些

指挥中心操作台作为现代指挥系统的重要组成部分&#xff0c;其材质的选择不仅关系到操作台的使用寿命和稳定性&#xff0c;更直接影响到整个指挥中心的运行效率和安全性。因此&#xff0c;对指挥中心操作台的材质设定一系列标准显得尤为重要。 耐用性考量&#xff1a;鉴于指挥中…

Android Dialog使用汇总

Dialog分类 AlertDialog Dialog 类是对话框的基类&#xff0c;官方建议我们不要直接实例化它&#xff0c;而是使用其子类来获取实例。AlertDialog是系统提供的一个直接子类&#xff0c;它能帮助我们快速构建出不同类型的弹窗。接下来就看下各种类型弹窗的使用。 1、普通对话框…

【遗传算法】【机器学习】【Python】常见交叉方法(一)、单点交叉和两点交叉

一、遗传算法流程图 交叉过程即存在于上图的”交叉“&#xff08;crossover&#xff09;步骤中。 二、单点交叉 随机地选择1个交叉位点进行交叉&#xff0c;如下图所示&#xff1a; 用random库实现随机性&#xff1a; import random# 简单的单点交叉方式 def sing_muta(lis…

AI写作革命:毕业论文的新助手

写作这件事一直让我们从小学时期就开始头痛&#xff0c;初高中时期800字的作文让我们焦头烂额&#xff0c;一篇作文里用尽了口水话&#xff0c;拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业&#xff0c;结果毕业前的最后一道坎拦住我们的是毕业论文&#xff0c;这玩意不…

操作简单中医电子处方中药划价系统软件视频教程,佳易王诊所电子处方管理系统软件

操作简单中医电子处方中药划价系统软件视频教程&#xff0c;佳易王诊所电子处方管理系统软件 一、前言 以下软件操作教程以&#xff0c;佳易王中西医诊所电子处方软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、软件支持中医和西医处方…