Django(缓存系统)

什么是缓存Cache

	缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储临时数据,常用介质的是读取速度很快的内存。一般来说从数据库多次把所需要的数据提取出来,要比从内存或者硬盘等一次读出来付出的成本大很多。对于中大型网站而言,使用缓存减少对数据库的访问次数是提升网站性能的关键之一。

为什么要使用Cache

	在Django中,当用户请求到达视图后,视图会先从数据库提取数据放到模板中进行动态渲染,
渲染后的结果就是用户看到的网页。如果用户每次请求都从数据库提取数据并渲染,将极大降低性能,
不仅服务器压力大,而且客户端也无法即时获得响应。如果能将渲染后的结果放到速度更快的缓存中,
每次有请求过来,先检查缓存中是否有对应的资源,如果有,直接从缓存中取出来返回响应,
节省取数据和渲染的时间,不仅能大大提高系统性能,还能提高用户体验。

缓存Cache的应用场景

    缓存主要适用于对页面实时性要求不高的页面。存放在缓存的数据,通常是频繁访问的,而不会经常修改的数据。我们来举几个应用例子:博客文章。假设用户一天更新一篇文章,那么可以为博客设置1天的缓存,一天后会刷新。购物网站。商品的描述信息几乎不会变化,而商品的购买数量需要根据用户情况实时更新。我们可以只选择缓存商品描述信息。缓存网页片段。比如缓存网页导航菜单和脚部(Footer)。

django-cache文档地址

https://docs.djangoproject.com/zh-hans/2.1/topics/cache/

Django中如何使用Cache

1.在视图View中使用
from django.views.decorators.cache import cache_page# 在需要缓存的视图上添加装饰器, 参数是设置timeout 超时时间, 单位是秒
@cache_page(60 * 15) [单位:s,表示缓存15分钟]
def my_view(request):
...给视图添加缓存是有风险的,如果视图所展示的网页中有经常动态变动的信息,那么被添加缓存命令不可取。缓存整个视图最实用的场景应该是这个视图所展示的网页的内容基本上不怎么变动,或者说在很长一段时间内不需要变动,这样使用缓存就非常有效。
2.在路由URLConf中使用
from django.views.decorators.cache import cache_pageurlpatterns = [
path('foo/<int:code>/', cache_page(60 * 15)(my_view)),
]URLconf 使用缓存和视图函数使用缓存需要注意的地方是一样的,因为它们都是缓存整个页面,所有都需要考虑是否整个页面都应该缓存。
3.在模板中使用
{% load cache %}
# 第一个参数是时间,第二个参数是别名
{% cache 500 sidebar request.user.username %}
.. sidebar for logged in user ..
{% endcache %} 可以保证只缓存那些适合使用缓存的 HTML 片段
4.全局的使用(通过中间件实现)
用户的请求通过中间件,经过一系列的认证等操作,如果请求的内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户当返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将缓存保存至Django的缓存之中,以实现全站缓存MIDDLEWARE = [# 站点缓存 , 注意必须在第一个位置'django.middleware.cache.UpdateCacheMiddleware',...# 站点缓存, 注意必须在最后一个位置'django.middleware.cache.FetchFromCacheMiddleware',]

Django中缓存设置

1.Database caching[数据库缓存]

my_cache_table-->数据库缓存到表中
[先查询表中有没有对应路由的缓存数据,如果有则取出]问题:通过比对过期时间判断是否重新请求数据库,缓存过期该条记录仍旧在数据库表中,需要根据具体情况删除表中过期的缓存记录1.配置mysql数据库DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql',   // mysql 为mysql 数据库'NAME': 'onlinetest',             // 对应使用的数据库'USER': 'root',                     // 对应数据库用户名'PASSWORD': 'mysql',         // 对应数据库密码'HOST': '127.0.0.1',            // 本地数据库'PORT': 3306,                   // 对应数据库端口}}2.配置cacheCACHES = {'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache','LOCATION': 'my_cache_table',}}3.创建cache tablepython manage.py createcachetable   [自动产生my_cache_table表]

2.Filesystem caching[文件系统缓存]

不在表中保存信息,而将数据保存在本地磁盘中的文件中1.配置cache[自动创建c:/foo/bar文件夹]CACHES = {'default': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache','LOCATION': os.path.join(BASE_DIR,'cachedata'),}}

在这里插入图片描述

3.redis缓存[key:value]

到达过期时间自动删除key,不用考虑优化的问题

在这里插入图片描述

django-redis文档https://django-redis-chs.readthedocs.io/zh_CN/latest/	0.安装redishttps://www.runoob.com/redis/redis-install.html
1.下载redispip install django-redis2.在settings中配置redis[注意阿里云放开6379端口]CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://:password@ip:6379/0",  #[0号数据库,1号数据库..]"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",},}}REDIS_TIMEOUT=7*24*60*60CUBES_REDIS_TIMEOUT=60*60NEVER_REDIS_TIMEOUT=365*24*60*603.具体使用from django.core.cache import cache #引入缓存模块cache.set('k', '12314', 30*60)      #写入key为k,值为12314的缓存,有效期30分钟cache.has_key('k') #判断key为k是否存在cache.get('k')     #获取key为k的缓存 cache.keys('*') #获取所有的

4.开发调试缓存(这个模式是开发调试使用的,不需要执行任何操作)

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 缓存后台使用的引擎'TIMEOUT': 300,            # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期)'OPTIONS':{'MAX_ENTRIES': 300,          # 最大缓存记录的数量(默认300)'CULL_FREQUENCY': 3,          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)},}
}

5.内存缓存(将缓存的内容保存到内存区域)

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 指定缓存使用的引擎'LOCATION': 'unique-snowflake',         # 写在内存中的变量的唯一值 'TIMEOUT':300,             # 缓存超时时间(默认为300秒,None表示永不过期)'OPTIONS':{'MAX_ENTRIES': 300,           # 最大缓存记录的数量(默认300)'CULL_FREQUENCY': 3,          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)}  }
}

6.Memcache缓存(使用python-memcached模块)

Memcached是Django原生支持的缓存系统.要使用Memcached,需要下载Memcached的支持库python-memcached或pylibmcCACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', # 指定缓存使用的引擎'LOCATION': '192.168.10.100:8888',         # 指定Memcache缓存服务器的IP地址和端口'OPTIONS':{'MAX_ENTRIES': 300,            # 最大缓存记录的数量(默认300)'CULL_FREQUENCY': 3,           # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)}}
}

7.Memcache缓存(使用pylibmc模块)

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',  # 指定缓存使用的引擎'LOCATION':'192.168.10.100:11211',         # 指定本机的11211端口为Memcache缓存服务器'OPTIONS':{'MAX_ENTRIES': 300,            # 最大缓存记录的数量(默认300)'CULL_FREQUENCY': 3,           # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)},  }}

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

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

相关文章

【react】配置React 的开发环境

安装之前要确认你的机器上安装了 node.js 环境包括 npm。如果没有安装&#xff0c;可以到 node.js 的官网下载自己电脑的对应的安装包来安装好环境。Node.js 安装配置菜鸟教程 node自带npm 第一种方法&#xff08;create-react-app&#xff09; 安装好环境以后&#xff0c;…

Mellel 5 for mac(文字处理软件)

Mellel 5 for mac一款非常好用的文字处理软件&#xff0c;Mellel 5版包括所有经典的文本编辑工具&#xff0c;强大&#xff0c;灵活和可靠&#xff0c;它将帮助您撰写书籍&#xff0c;学术论文或博士学位论文&#xff0c;从概述想法到完成手稿。 Mellel 5 for mac安装教程 在本…

bliss android x86,Bliss OS现在可让您基于Android-x86和AOSP在PC上运行Android 10

Bliss OS是一个基于Android-x86项目的开源操作系统&#xff0c;有望让您在任何Linux&#xff0c;Windows或Chromebook PC或平板电脑设备上运行最新的Android 10移动操作系统。 Bliss OS基于AOSP(Android开放源代码项目)和Android-x86项目&#xff0c;提供了许多自定义和主题选项…

nginx跨域步骤详情

此文章只实现在本地开发环境下的应用nginx跨域 1.下载nginx稳定版本 下载地址&#xff1a;nginx: download 2. 配置nginx文件下的nginx.conf 3. 打包 我用的react &#xff0c;打包命令是&#xff1a;npm run bulid , 把打包后的dist文件下的内容复制到下面的文件地址 4…

index.html trend.html

1.jq22模板下载&#xff1a;http://www.jq22.com/jquery-info22538 2.layUI下载&#xff08;layUI-v2.5.5&#xff09;&#xff1a;https://www.layui.com/ 3.jquery下载&#xff08;Development 3.4.1&#xff09;&#xff1a;https://jquery.com/download/ 【网页直接打开文件…

Starlink星链计划能与5G抗衡?看一下马斯克吹过的牛

文章目录 一、Starlink星链计划是什么&#xff1f;1. 卫星发射情况2. 性能测试 二、5G 通信性能1. 通信速度2.通信时延3. 速度快的主要原因4. 系统容量 三、Starlink 与 5G 的对比1. 覆盖范围2. 通信速度 四、Starlink 的优势1. 局部地区的网络服务2. 军事服务3. 未来远景 一、…

docker基础使用

docker下载centos镜像(用作配置jdk环境系统) docker pull centos #版本号可以自己加,默认拉取最新的 docker命令 docker search xxxx 搜索xxxx镜像 docker pull xxxx 下载xxxx镜像&#xff0c;版本号…

Keras--基于VGG16卷积神经网络---猫狗分类

Cats vs. Dogs&#xff08;猫狗大战&#xff09;来源于 Kaggle 上的一个竞赛&#xff0c;内容非常简单&#xff0c; Kaggle 提供了一个猫和狗的数据集&#xff0c;我们需要建立一个算法进行训练&#xff0c;最后这个算法要能准确识别出猫和狗。Kaggle 提供的数据集分为训练集…

软件欺诈的骗局揭露:“替罪羊”究竟是如何构建的?

创建一个能工作的软件产品是很困难的&#xff0c;卖欺诈性的软件产品要容易得多。 声明&#xff1a;本文已获作者Matt Stancliff翻译授权。 作者 | Matt Stancliff 译者 | 苏本如&#xff0c;责编 | 郭芮 头图 | CSDN 下载自东方 IC 出品 | CSDN&#xff08;ID&#xff1a;CSDN…

什么?我要对AI礼貌?人机交互面临的道德漏洞

作者 | 库珀 来源 | 数据实战派 头图 | 付费下载于 IC Photo 如果你在一条道路上行驶&#xff0c;突然前面拐弯处出现一辆无人驾驶汽车&#xff0c;你会继续坚持你的道路优先权&#xff0c;还是让位使它先过去&#xff1f; 目前&#xff0c;我们大多数人在涉及其他人的情况下能…

Docker安装 elasticsearch-head

目录 前言安装elasticsearch-head步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2&#xff1a;拉取elasticsearch-head镜像拉取镜像查看已拉取的镜像 步骤3&#xff1a;创建容器创建容器方式1&#…

猿创征文|瑞吉外卖——管理端_菜品管理_1

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 专栏&#xff1a;瑞吉外卖 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;真正的程序员不看参考手册&#xff0c;新手和胆小鬼才会看。 本项目基于B站黑马程序员Jav…

【CSS】CSS 布局——常规流布局

<h1>基础文档流</h1><p>我是一个基本的块级元素。我的相邻块级元素在我的下方另起一行。</p><p>默认情况下&#xff0c;我们会占据父元素 100%的宽度&#xff0c;并且我们的高度与我们的子元素内容一样高。我们的总宽度和高度是我们的内容 内边距…

SpringBoot整合、SpringBoot与异步任务

目录 一、背景描述二、简单使用方法三、原理五、使用自定义线程池六、Async失效情况 一、背景描述 java 的代码是同步顺序执行&#xff0c;当我们需要执行异步操作时我们通常会去创建一个新线程去执行。比如new Thread()。start()&#xff0c;或者使用线程池线程池 new Thread…

stm工程文件夹

STM32工程文件构成 从下图可以看出我们的工程目录是由CORE、OBJ、STM32F10x_FWLib、USER、SYSTEM以及HARDWARE文件夹组成的。此外还有一个文本文档README.TXT、以及一个Windows 批处理文件 (.bat)keilkilll.bat。 1、CORE文件夹 CORE文件夹下一共有三个文件&#xff0c;它们分…

STL文件及其读取

1引言 STL(Stereo lithographic)文件格式是美国3D SYSTEMS公司提出的三维实体造型系统的一个接口标准&#xff0c;其接口格式规范。采用三角形面片离散地近似表示三维模型&#xff0c;目前已被工业界认为是快速成形(rapid prototypi ng)领域的标准描述文件格式。在逆向工程、有…

Python-OpenCV中的图像处理-直方图

Python-OpenCV中的图像处理-直方图 直方图统计直方图绘制直方图Matplotlib绘制灰度直方图Matplotlib绘制RGB直方图 使用掩膜统计直方图直方图均衡化Numpy图像直方图均衡化OpenCV中的直方图均衡化CLAHE 有限对比适应性直方图均衡化 2D直方图OpenCV中的2D直方图Numpy中2D直方图 直…

基于frida检测demo来学习frida检测及anti

原文地址:https://www.zhuoyue360.com/crack/108.html 前言 随着逆向的攻防强度不断的提升,目前主流的移动安全厂商的加固服务基本上都已包含了常见Hook框架的反调试,我们最常见的hook工具如下: fridaxposed 为了更好的提升自己相关的经验,我们可以拿这类demo来进行原理的学…

腾讯云轻量应用服务器镜像应用模板清单大全

腾讯云轻量应用服务器支持多种应用模板镜像&#xff0c;Windows和Linux镜像模板都有&#xff0c;如&#xff1a;宝塔Linux面板腾讯云专享版、WordPress、WooCommerce、LAMP、Node.js、Docker CE、K3s、宝塔Windows面板和ASP.NET等应用模板镜像&#xff0c;腾讯云服务器网分享腾…

聊一下互联网开源变现

(点击即可收听) 互联网开源变现其实是指通过开源软件或者开放源代码的方式&#xff0c;实现收益或盈利。这种方式越来越被广泛应用于互联网行业 在互联网开源变现的模式中&#xff0c;最常见的方式是通过捐款、广告、付费支持或者授权等方式获利。 例如&#xff0c;有些开源软件…