【性能】DJANGO + REDIS 缓存提速

不加REDIS缓存时,每次访问都要读取数据库,当访问量非常大的时候, 就会有很多次的数据库查询,会造成访问速度变慢,服务器资源占用较多等问题。
当使用了缓存后,访问情况变成了如下:访问一个网址时, 尝试从 cache 中找有没有,如果需要的数据在缓存中没有,则去数据库取,渲染返回页面,同时将这些数据保存在缓存中,在一定时间内,当用户再次访问页面时,就没必要去数据库取了,直接从缓存中拿到数据。缓存放在内存中,读写速度快。

安装

windows下安装redis

在windows下安装redis。
https://github.com/MSOpenTech/redis/releases下载msi安装包。根据提示安装即可。
之后到终端执行

redis-server

如果报错
[12596] 21 Feb 12:07:17.520 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server.exe /path/to/redis.conf
[12596] 21 Feb 12:07:17.525 # Creating Server TCP listening socket *:6379: bind: No such file or directory
是因为之前的redis服务没有关闭,执行:

redis-cli
127.0.0.1:6379> shutdown
not connected> exit
redis-server

安装django-redis

因为我使用了pipenv虚拟环境,我使用以下语句安装:

pipenv install django_redis

settings配置

在settings.py下添加以下代码:

CACHES = {'default':{'BACKEND': 'django_redis.cache.RedisCache','LOCATION': 'redis://127.0.0.1:6379',"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}}
}

LOCATION需配置开启redis的端口。

测试是否添加成功

在终端中输入命令,进入django后台命令模式

pipenv run python manage.py shell

输入

from django.core.cache import cache #引入缓存模块cache.set('cherie', '123', 60)      #写入key为cherie,值为123的缓存,有效期1分钟
cache.get('cherie')     #获取key为cherie的缓存

如果没有报错,成功获取值,则redis添加成功。

应用

全站使用缓存

使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用 FetchFromCacheMiddleware 获取内容并返回给用户,如果不存在则UpdateCacheMiddleware 会将缓存保存至缓存,从而实现全站缓存。
在settings里配置:

MIDDLEWARE = ['django.middleware.cache.UpdateCacheMiddleware',   //重写了process_response......'django.middleware.cache.FetchFromCacheMiddleware',   //重写了process_request
]CACHE_MIDDLEWARE_SECONDS = 60       # 缓存超时时间设为60秒

单独视图缓存

如果配置了全局缓存的中间件,需先删除掉。
单独视图的缓存在视图函数上加上一个装饰器即可。
在views.py中添加以下代码:

from django.views.decorators.cache import cache_page@cache_page(60)   //设置超时时间为60秒 
def index(request):......

模板局部视图使用

views.py不需要修改,在templation里添加:

# 1.引入TemplateTag{% load cache %}# 2.使用缓存{% cache 60 name %}  # 缓存超时(秒) 和 缓存片段的名称(名称按原样使用)缓存内容{% endcache %}

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

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

相关文章

用户登录和注销

在Linux系统中,用户登录和注销是一个常见的操作,涉及到用户账户管理和服务管理等多个方面。下面分别介绍用户在图形界面和命令行下的登录和注销流程。 图形界面下的登录和注销 登录 登录界面: 当用户启动计算机时,通常会看到一…

Python Flask_APScheduler定时任务的正确(最佳)使用

描述 APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能。最近使用Flask框架使用Flask_APScheduler来做定时任务,在使用过程当中也遇到很多问题,例如在定时任务调用的方法中需要用到flask的app.app_context()时&#…

无影云电脑:在最破的电脑上玩最顶配的游戏

关注卢松松,会经常给你分享一些我的经验和观点 我对云电脑很感兴趣,这几天我深度体验了无影云电脑的个人版.,我给大家分享下。这款云电脑到底能不能替代你的笔记本?到底能不能改变人们使用电脑的方式? 先说结论: (1)从草根创…

【Canvas与艺术】菊花孔雀螺旋

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>菊花孔雀螺旋</title><style type"text/css">…

vue3实现打飞机(雷电)

代码可直接运行直接玩&#xff0c;而且要自己加上一些随机事件都很简单了&#xff08;例如发射速度变快&#xff0c;子弹变大&#xff0c;敌人变慢等&#xff09; <template><div class"flex items-center justify-center h-100vh w-full"><div>S…

.net MAUI应用生命周期

.NET Multi-platform App UI (.NET MAUI) 应用通常有四种执行状态&#xff1a;“未运行”、“运行中”、“已停用”和“已停止”。 当应用从未运行状态转换为运行状态、从运行状态转换为已停用状态、从已停用状态转换为已停止状态、从已停止状态转换为运行状态&#xff0c;以及…

【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制

K8s 的鉴权管理&#xff08;二&#xff09;&#xff1a;基于属性 / 节点 / Webhook 的访问控制 1.基于属性的访问控制&#xff08;ABAC 鉴权&#xff09;2.基于节点的访问控制&#xff08;node 鉴权&#xff09;2.1 读取操作2.2 写入操作 3.基于 Webhook 的访问控制3.1 基于 We…

替换cython_bbox库中bbox_ious

说明一下问题&#xff1a;目标追踪代码里往往用到cython_bbox中的bbox_ious。但是该库需要用到 VC&#xff0c;按照有些麻烦。于是采用直接替换该方法&#xff0c;用纯代码实现&#xff0c;无需调用库。 File “src\cython_bbox.pyx”, line 17, in cython_bbox.bbox_overlaps…

深度学习-01 Pytorch

torchvision是一个用于计算机视觉任务的Python包&#xff0c;它是PyTorch的一个扩展库。它提供了一些流行的数据集、模型架构和图像转换函数&#xff0c;以方便用户进行计算机视觉任务的开发和研究。 1.torchvision中包含了许多常用的计算机视觉数据集&#xff0c;如MNIST、CIF…

【AcWing】861. 二分图的最大匹配(匈牙利算法)

匈牙利算法&#xff0c;他可以在比较快的时间复杂度之内告诉我们左边和右边成功匹配的最大数是多少 匹配指的是边的数量&#xff0c;成功的匹配指的是两个未被使用的点之间存在一条边(就不存在两条边共用了一个点的)。 匈牙利算法可以返回成功匹配的最大匹配数是多少。 #incl…

四、搭建网站服务器超详细步骤——解决宝塔界面无法登录问题

前言 本篇博客是搭建网站服务器的第四期&#xff0c;也到了中间的一节 先分享一下我在搭建网站时的个人感受&#xff0c;我在这个环节卡住了很久 后来突然醒悟了&#xff0c;然后成功进入了宝塔界面 现在就来分享一下&#xff0c;我所遇到的问题 小伙伴们坐好了 …

MySQL8 windows archive 安装

MySQL8超详细安装教程&#xff08;MySQL8安装图文教程&#xff09;_MySQL8安装包-CSDN博客 【补充&#xff1a;】 1.mysqld --install mysql // mysql是本次安装的服务命名&#xff0c;也可以叫做mysql8 etc. 2.手动卸载 2.1.net stop mysql 2.2.删除datadir // 即my.ini配置…

项目实战 ---- 商用落地视频搜索系统(9)---UI与上层service的交互优化

目录 背景 第一次优化(UI优化) 优化前UI 优化方向与问题 代码 修改效果 第二次优化(整合优化) 优化方向与问题 代码 优化效果 第三次优化(js层优化) 优化方向与问题 代码 优化效果 第四次优化(UI逻辑再优化) 优化方向与问题 代码 优化效果 第五次优化(纯U…

通信工程学习:什么是FMC固定移动融合

FMC&#xff1a;固定移动融合 FMC固定移动融合&#xff0c;即Fixed Mobile Convergence&#xff08;固定移动网络融合&#xff09;&#xff0c;是指通过固定网络与移动网络之间的融通、合作&#xff0c;实现全业务及融合业务的经营。这一技术旨在打破传统固定网络和移动网络之间…

使用 Parallel 类进行多线程编码(上)

用 C# 进行多线程编程有很多方式&#xff0c;比如使用 Thread 对象开启一个新线程&#xff0c;但这已经是一种落后的写法了&#xff0c;现在推荐的写法是使用 Parallel 类&#xff0c;它可以让我们像写传统代码一样编写多线程的程序&#xff0c;Parallel 类有三个常用的方法如下…

C#笔记8 线程是什么?多线程怎么实现和操作?

这和前面的学习内容可能有点不太连贯&#xff0c;但是呢我们一般来说的学习就是遇到什么困难就去学习什么&#xff0c;这也是为什么看那些循序渐进的教程虽然学的很饱满&#xff0c;但是我们有时会学了前面忘记了后面&#xff0c;或者对某个板块理解不深&#xff0c;乃至于写代…

VS Code 中提升编程效率的功能及使用方法

Visual Studio Code&#xff08;简称 VS Code&#xff09;是一款功能强大且灵活的源代码编辑器&#xff0c;支持多种编程语言&#xff0c;并提供了丰富的插件生态系统。对于开发者来说&#xff0c;掌握一些提升编程效率的功能是非常重要的。本文将介绍 VS Code 中一些能够显著提…

大学物理实验-杨氏双缝干涉实验

一、实验目的 1.理解杨氏双缝干涉现象的基本原理&#xff1b; 2.掌握用光具座调整杨氏双缝干涉装置的光路&#xff1b; 3.用CCD观察杨氏双缝干涉的实验现象&#xff1b; 4.学会用干涉法测量未知光波的波长。 二、仪器用具 FB760-6型光学实验仪多功能光学片 三、实验原理 1.波…

智能提取:OfficeImagesExtractor让文档图片提取更简单

“科技是国之利器&#xff0c;也是民之福祉。” 在数字化办公日益普及的今天&#xff0c;我们对文档处理的需求也在不断增长。尤其是对于Office文档中的图片、视频和音频等多媒体内容的提取&#xff0c;传统的方法是繁琐且效率低下的。在这样的背景下&#xff0c;一款能够高效、…

计算机毕业设计选题推荐-产品委托配送系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…