简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中
由于Django是动态网站,所有每次请求均会去数据进行相应的操作
经常使用到的有文件缓存以及redis缓存
这里就只写文件缓存、内存缓存和数据库缓存配置了,其他想要了解可以自行查找
settings.py配置文件中
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配置文件中
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配置文件中
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 manage.py createcachetable
既然是全站缓存,当然要使用Django中的中间件
用户的请求通过中间件,经过一系列的认证等操作,如果请求的内容在缓存中存在,则使用
FetchFromCacheMiddleware
获取内容并返回给用户。当返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware
会将缓存保存至Django的缓存之中,以实现全站缓存
缓存整个站点,是最简单的缓存方法
需要在settings配置文件中的中间件中加入 “update(放在最前面)” 和 “fetch(放在最后面)” 中间件
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
........
'django.middleware.cache.FetchFromCacheMiddleware'
] '“update” 必须配置在第一个位置“fetch” 必须配置在最后一个位置'
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})
放在模版层使用的:
{% load cache %}
<h3 style="color: green">不缓存:-----{{ ctime }}</h3>
{% cache 2 'name' %}
<h3>缓存:-----:{{ ctime }}</h3>
{% endcache %}