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 %}
相关推荐
辞旧 lekkk3 分钟前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap
吴声子夜歌12 分钟前
Redis 3.x——集群节点通信
redis·缓存·集群
梅雅达编程笔记2 小时前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas
zhz52143 小时前
GIS项目中空间参考转换与MBTiles偏移:问题成因、解法与避坑
python·vue·gis
KaMeidebaby4 小时前
卡梅德生物技术快报|如何制备单克隆抗体:小众禽类靶点单抗制备实操流程:双载体抗原交叉筛选完整工艺记录
人工智能·python·深度学习·算法·机器学习
乱写代码5 小时前
Pydantic学习--BaseModel
python
fu15935745685 小时前
【边缘计算实战】P1:从零搭建边云任务卸载仿真实验台(Python 可复现)
数据库·python·边缘计算
蜡台5 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
智能体与具身智能6 小时前
TVA 本质内涵与核心特征(系列)
人工智能·python·智能体视觉
云雾J视界6 小时前
SST:高频变压器设计实战:铁氧体 vs 纳米晶 vs 非晶,磁性材料怎么选
python·acdc·dab·sst