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 %}
相关推荐
我是华为OD~HR~栗栗呀30 分钟前
华为od-21届考研-C++面经
java·c语言·c++·python·华为od·华为·面试
明月(Alioo)39 分钟前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
鱼鱼说测试1 小时前
Linux下运行Jmeter
开发语言·python
Achou.Wang1 小时前
源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
开发语言·缓存·golang
CodeCraft Studio2 小时前
国产化Excel开发组件Spire.XLS教程:将Python列表转换为Excel表格(3种实用场景)
开发语言·python·excel·spire.xls·python列表转excel·国产化文档开发
企鹅侠客2 小时前
基于python写的PDF表格提取到excel文档
python·pdf·excel·pdf文档表格转excel
mortimer2 小时前
Python 中那些鲜为人知但实用的工具函数
python
weixin_421133412 小时前
Django 的文档接口
python·django·sqlite
LK_073 小时前
【Open3D】Ch.3:顶点法向量估计 | Python
开发语言·笔记·python
小码哥0683 小时前
智能化招聘系统设计与实现-Java
开发语言·python