Django之缓存

文章目录

一、什么是缓存

简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中

  • 当用户再次请求时,直接去缓存中拿,避免对数据库的频繁操作,加快数据的显示时间
  • 需要知道的是,缓存里面的数据一般都设置有超时时间,缓存一般用在数据变化不大,实时率不高的情况下。

由于Django是动态网站,所有每次请求均会去数据进行相应的操作

  • 当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存
  • 缓存将一个某个views的返回值保存至内存或者memcache中
    • 5分钟内(默认配置)再有人来访问时,则不再去执行view中的操作
    • 而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

二、Django中的6种缓存方式

  • 内存缓存
  • 文件缓存
  • 数据库缓存
  • Memcache缓存(使用python-memcached模块)
  • Memcache缓存(使用pylibmc模块)
  • redis缓存

经常使用到的有文件缓存以及redis缓存


三、Django缓存的配置

这里就只写文件缓存、内存缓存和数据库缓存配置了,其他想要了解可以自行查找

内存缓存(默认情况下就是缓存到内存中)

settings.py配置文件中

python 复制代码
	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)
	  }  
	 }
	}

文件缓存(把缓存数据存储在文件中)

settings.py配置文件中

python 复制代码
	CACHES = {
	 'default': {
	  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎
	  'LOCATION': '/var/tmp/django_cache',        #指定缓存的路径
	  'TIMEOUT':300,              #缓存超时时间(默认为300秒,None表示永不过期)
	  'OPTIONS':{
	   'MAX_ENTRIES': 300,            # 最大缓存记录的数量(默认300)
	   'CULL_FREQUENCY': 3,           # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
	  }
	 }   
	}

数据库缓存(把缓存数据存储在数据库中)

settings.py配置文件中

python 复制代码
	CACHES = {
	 'default': {
	  'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  # 指定缓存使用的引擎
	  'LOCATION': 'cache_table',          # 数据库表    
	  'OPTIONS':{
	   'MAX_ENTRIES': 300,           # 最大缓存记录的数量(默认300)
	   'CULL_FREQUENCY': 3,          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
	  }  
	 }   
	}

注意,创建缓存的数据库表使用的语句:

python 复制代码
	python manage.py createcachetable

四、Django中的缓存应用(三种粒度)

全站缓存(利用Django中间件)

既然是全站缓存,当然要使用Django中的中间件

用户的请求通过中间件,经过一系列的认证等操作,如果请求的内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户。当返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将缓存保存至Django的缓存之中,以实现全站缓存

python 复制代码
	缓存整个站点,是最简单的缓存方法
	需要在settings配置文件中的中间件中加入 "update(放在最前面)" 和 "fetch(放在最后面)" 中间件
	MIDDLEWARE = [
	    'django.middleware.cache.UpdateCacheMiddleware',
	    ........
	    'django.middleware.cache.FetchFromCacheMiddleware'
	]	'"update" 必须配置在第一个位置"fetch" 必须配置在最后一个位置'

视图函数缓存

python 复制代码
	import datetime
	from django.views.decorators.cache import cache_page  导入缓存装饰器模块
	@cache_page(timeout=10)  装饰器
	def demo2(request):
	    ctime = datetime.datetime.now()
	    return render(request,'demo2.html',{'ctime':ctime})

局部缓存

python 复制代码
	放在模版层使用的:
	{% load cache %}
	 <h3 style="color: green">不缓存:-----{{ ctime }}</h3>
	{% cache 2 'name' %}
	 <h3>缓存:-----:{{ ctime }}</h3>
	{% endcache %}
相关推荐
BD_Marathon几秒前
【Python】初识迭代器
python
gz927cool27 分钟前
Python 全栈应用最佳实践完整指南
开发语言·python·ai
智购科技智能售货柜40 分钟前
顾客已经关门,视觉售货柜还在处理旧画面:延迟积压怎么查?~YH
python·单片机·嵌入式硬件·物联网·eclipse
梯度下降者1 小时前
Python从0到100(三):Python中的变量介绍
python·作用域·变量·数据类型·计算机常识
AIFQuant1 小时前
Python期货行情API接入:股指、黄金、原油多品种数据管道实战
开发语言·python·金融·区块链·量化开发
威哥爱编程1 小时前
Python 智能体开发实战 07:让它查课表它张口就编?给 Agent 接上真正能动手的工具
python·agent
Wang's Blog1 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友
2601_962885721 小时前
按主板/科创/创业/北交分板扫描选股
python
威哥爱编程1 小时前
Python 智能体开发实战 08:上线第一天就挂?给 Agent 装上重试、超时和降级三条保险丝
python·agent
Dmz丶1 小时前
前端转 AI 100 天 Day 35:结构化输出——让 LLM 稳定返回 JSON
python