django的缓存简介
动态网站中,用户的请求需要对数据库进行操作,对服务端的资源消耗比较大,特别是在联多个表查询的时候。为了提高并发量,提高访问的速度,可以使用缓存
缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户。
这里只做简单的介绍,提供一些例子。以后做缓存会使用extensions,数据会放在redis中
入门使用
前后端混合开发的项目中,Django提供了不同粒度的缓存,可以缓存某个页面,可以只缓存一个页面的某个部分,甚至可以缓存整个网站
配置缓存地址到文件
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存使用的引擎
'LOCATION': 'G:django_cache', # 指定缓存的路径
'TIMEOUT': 300, # 缓存超时时间(默认为300秒,None表示永不过期)
'OPTIONS': {
'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
}
}
}
全站缓存
中间件
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
。。。。
'django.middleware.cache.FetchFromCacheMiddleware',
]
# 在setting.py中的中间件配置
CACHE_MIDDLEWARE_SECONDS=10 # 全站缓存时间
单页面缓存
# 在视图函数上加装饰器
from django.views.decorators.cache import cache_page
@cache_page(5) # 缓存5s钟
def test_cache(request):
import time
ctime=time.time()
return render(request,'index.html',context={'ctime':ctime})
页面局部缓存
{% load cache %} 导入缓存
{% cache 5 'name' %} # 5表示5s钟,name是唯一key值
{{ ctime }}
{% endcache %}
前后端分使用缓存
# views.py ...
from django.core.cache import cache
# 导入缓存模块
# 需要存的时候cache.set,需要取的时候cache.get
cache.set('key',value可以是任意数据类型)
cache.get('key')
未完,后续再更新