由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存。
缓存工作原理:缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有用户来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户。
Django提供了6种缓存方式:
-
<李>开发调试缓存李>
<李>内存缓存李>
<李>文件缓存李>
<李>数据库缓存李>
<李> Memcache缓存(使用python-memcached模块)李>
<李> Memcache缓存(使用pylibmc模块)李>
这里不多介绍,有兴趣的可以去看看官方文档:https://docs.djangoproject.com/en/dev/topics/cache/
要想在Django配置复述,缓存,则需要先安装依赖:
pip3安装django-redis
settings.py配置:
缓存={ “默认”:{ “后端”:“django_redis.cache.RedisCache”, “位置”:“复述://127.0.0.1:6379”, "选项":{ :“CLIENT_CLASS django_redis.client.DefaultClient”, “CONNECTION_POOL_KWARGS”: {“max_connections”: 100} #“密码”:“密码”, } } }
<>强视图中连接(手动操作复述):强>
django。快捷方式进口HttpResponse 从django_redis进口get_redis_connection def指数(请求): r=get_redis_connection(“违约”) r。hmset (“name_a”{“key_a”:“value_a”、“key_b”:“value_b”}) 返回HttpResponse(“设置复述”) def命令(要求): r=get_redis_connection(“违约”) val=r。hmget (“name_a”(“key_a”、“key_b”)) 打印(val) # (b 'value_a”, b 'value_b”) 返回HttpResponse(“获取复述”)
<强>全站使用缓存
强>
使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存。
中间件=[ “django.middleware.cache。UpdateCacheMiddleware”, #放在第一 #其他中间件…… “django.middleware.cache。FetchFromCacheMiddleware”, #放在最后 ] CACHE_MIDDLEWARE_ALIAS=" " #用于存储的缓存别名 CACHE_MIDDLEWARE_SECONDS=600 #每个页面应缓存的秒数 CACHE_MIDDLEWARE_KEY_PREFIX=" " #如果使用相同的Django安装在多个站点之间共享缓存,请将其设置为站点名称或此Django实例特有的其他字符串,以防止发生密钥冲突。如果你不在乎,请使用空字符串。
测试
django。快捷方式进口HttpResponseimport时间 def指数(请求): t=time.time () 返回HttpResponse(“时间:{}”.format (str (t))) def回家(请求): t=time.time () 返回HttpResponse(“时间:{}”.format (str (t)))
可以发现,索引或者家页面第一次返回的时间是多少,往后10分钟以内,时间都是不变的。
单独视图缓存(记得取消全站缓存中间件配置)
django。快捷方式进口HttpResponse 从django.views.decorators.cache进口cache_page 导入的时间 @cache_page (60 * 10) def指数(请求): t=time.time () 返回HttpResponse(“时间:{}”.format (str (t))) def回家(请求): t=time.time () 返回HttpResponse(“时间:{}”.format (str (t)))
这次、索引页面第一次访问返回的时间需要过10分钟再次访问才能变化,而家页面返回的时间是时时刻刻变化的。
模板局部视图使用
# 1。引入TemplateTag {%加载缓存%} # 2。使用缓存 {%缓存600名%}#缓存超时(秒)和缓存片段的名称(名称按原样使用) 缓存内容 {% endcache %}
示例:
# views.py django。快捷方式进口呈现 导入的时间 def指数(请求): t=time.time () 返回渲染(请求,”指数。html ", {“t”: t})Django缓存配置复述,使用详解