Django缓存

news2024/10/5 15:07:00

由于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配置...
]

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地知识库开源框架Fastgpt、MaxKB产品体验

本地知识库开源框架Fastgpt、MaxKB产品体验 背景fastgpt简介知识库共享部署 MaxKB总结 背景 上一篇体验了Quivr、QAnything两个开源知识库模型框架,这次介绍两款小众但是体验比较好的产品。 fastgpt 简介 FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&am…

RFID解决方案提高汽车行业的可追溯性

汽车产业是一个典型的密集型资金产业,为了降低成本,许多汽车制造商和零部件供应商选择在海外设厂,上中下游企业分布在世界各地。因此,在汽车行业内,可追溯性是非常重要的,它在整个供应链中实时识别原材料、…

CogVLM2多模态开源大模型部署与使用

CogVLM2多模态开源大模型部署与使用 项目简介 CogVLM2 是由清华大学团队发布的新一代开源模型系列。2024年5月24日,发布了Int4版本模型,只需16GB显存即可进行推理。2024年5月20日,发布了基于llama3-8b的CogVLM2,性能与GPT-4V相当…

怎么用微信小程序实现远程控制空调

怎么用微信小程序实现远程控制空调呢? 本文描述了使用微信小程序调用HTTP接口,实现控制空调,通过不同规格的通断器,来控制不同功率的空调的电源。 可选用产品:可根据实际场景需求,选择对应的规格 序号设备…

这个杂志,审稿到录用仅需一个月!毕业生的梦中情刊,本科生用NHANES数据库发文2区...

Lipids in Health and Disease 是一个公开的、同行评议的期刊,主要发表关于脂质所有方面的文章,影响因子逐年上升,国人发文占比排第一,年刊量100多篇!最重要的是,该期刊文章审稿速度特别快,最快…

《额尔古纳河右岸》有感

看完了迟子建老师的《额尔古纳河右岸》,老规矩,写点东西吧。最近一段时间确实挺迷茫的,所以给自己找了点事儿,看看书。期初并不能认真看进去,慢慢的看见去之后,就愈发想知道故事的后来。 书里有太多关于死亡…

地址线/时钟/数据线串联电阻作用

在一些线路中会串联电阻,那么这个电阻的作用到底是什么?什么时候需要串联电阻? 首先高速信号线中才考虑使用这样的电阻。在低频情况下,一般是直接连接。这个电阻有两个作用: 1.第一是阻抗匹配。因为信号源的阻抗很低…

element-plus表格添加简单右键

实现如下 <template><main class"mainClass" > <el-table :data"tableData" style"width: 100%"row-contextmenu"rowContextmenu"cell-contextmenu"cellContextmenu"contextmenu.prevent><el-table-c…

excle中数据分析,excle导入用sql简单处理

前言&#xff1a; 办法一&#xff1a;直接用excle导入db就行&#xff0c;如果excle导如db不能用&#xff0c;就用笨办法下面这个方法去做 1、从系统中导出excle 2、db中插入相应的表和标题 3、先手动插入条件&#xff0c;把insert语句复制出来 INSERT INTO test.test (orders…

教师产假多少天

教师产假究竟有多少天&#xff1f;这个问题或许在您计划家庭时显得尤为重要。教师作为国家公职人员&#xff0c;享有法定的产假权益。 根据规定&#xff0c;女职工的产假一般为98天&#xff0c;包括产前15天和产后83天。但请注意&#xff0c;这一标准并非全国统一&#xff0c;不…

机器学习算法 —— 基于鸢尾花数据集的逻辑回归分类

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 实践演示基于鸢尾花&#xff08;iris&#xff09;数据集的逻辑回归分类库函数导入数据读取/载入数据信息简单查看可视化展示利用逻辑回归模…

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 …

【STM32】STM32F103C6T6标准外设库

1、标准外设库获取 第一步&#xff0c;首先获取标准外设库&#xff0c;可以从官网进行下载。 https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html 根据自己的型号选择不同的系列&#xff0c;我这里选择是STM32F1系列 下载最新版本V3.6&a…

SemiDrive X9H 平台 QT 静态编译

一、 前言 芯驰 X9H 芯片&#xff0c;搭载多个操作系统协同运行&#xff0c;系统实现了仪表、空调、中控、副驾多媒体的四屏驱动控制&#xff0c;在人车智能交互上可以通过显示屏、屏幕触摸控制、语音控制、物理按键控制、车身协议的完美融合&#xff0c;使汽车更智能。让车主…

大型集团企业知识管理系统总体解决方案(38页PPT)

方案介绍&#xff1a; 通过本解决方案的实施&#xff0c;企业可以实现知识的全面管理和高效利用&#xff0c;提高员工工作效率和创新能力&#xff0c;降低企业运营成本&#xff0c;增强企业竞争力。同时&#xff0c;借助人工智能技术&#xff0c;企业可以更加精准地把握市场动…

国产SDI/功能与GV7600/GS2972类似

是一款传递数字标清和高清信号的数字视频发送器&#xff0c;功能与GV7600/GS2972类似&#xff0c;集成了线缆驱动器&#xff0c;可以使用 75 欧姆的同轴线缆传递525i&#xff0c;625i&#xff0c;720P&#xff0c;1080P。 支持的速率如下&#xff1a; 如需更多资料请留言哦&am…

Excel加密,记住4个方法,轻松保护数据!

“刚刚编辑完了一个Excel文档&#xff0c;为了防止数据泄露&#xff0c;我想将它加密。不知道大家有什么方法可以加密Excel呢&#xff1f;” 在当今信息高度发展的时代&#xff0c;数据的安全性显得尤为重要。对于企业而言&#xff0c;敏感数据的泄露可能导致严重的商业损失和声…

16. 最接近的三数之和 - 力扣

1. 题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 2. 示例 3.分析 做这道题目前&#xff0c;先做这道&#xff1a;三数之和 &#x…

JavaScript 从入门到精通Object(对象)

文章目录 对象文本和属性方括号计算属性 属性值简写属性名称限制属性存在性测试&#xff0c;“in” 操作符“for…in” 循环像对象一样排序 总结✅任务你好&#xff0c;对象检查空对象对象属性求和将数值属性值都乘以 2 对象引用和复制通过引用来比较克隆与合并&#xff0c;Obj…

记录layui-table中操作列的宽度随着权限变化而变化

最近做一个项目&#xff0c;某个页面因为角色不同&#xff0c;所以显示的的按钮有所不同。 管理员权限 普通人员权限 layui引入的table宽度是写死的&#xff0c;不能随着自动变化&#xff0c;查了一些资料&#xff0c;让写入css的方法 .layui-table th, .layui-table td { whi…