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 %}
相关推荐
biter down5 小时前
14:pytest-order 插件 顺序控制案例
开发语言·python·pytest
测试开发-学习笔记5 小时前
从0开始搭建自动化(一)-appium+python
python·自动化
㳺三才人子6 小时前
初探 Flask
后端·python·flask·html
AI算法沐枫7 小时前
机器学习到底是什么?
人工智能·python·深度学习·机器学习·数据挖掘·大模型·#ai
小技与小术7 小时前
玩转Flask
开发语言·python·flask
SilentSamsara7 小时前
Python 性能优化:tracemalloc、profiling 与 C 扩展加速
开发语言·python·青少年编程·性能优化
冰小忆7 小时前
大驼峰命名规范和小驼峰命名规范的区别是什么?
开发语言·python
高洁017 小时前
知识图谱:AI的超级大脑
人工智能·python·数据挖掘·知识图谱
知识分享小能手7 小时前
Flask入门学习教程,从入门到精通,Flask智能租房——前期准备 知识点详解(5)
python·学习·flask
Curvatureflight7 小时前
【架构实战】生产级大模型 API 接入指南:流式响应(Streaming)异常处理与监控闭环
python·架构