缓存
程序员文章站
2022-06-18 23:19:13
...
缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。
在Django中,当用户请求到达视图后,视图会先从数据库提取数据放到模板中进行动态渲染,渲染后的结果就是用户看到的网页。如果用户每次请求都从数据库提取数据并渲染,将极大降低性能,不仅服务器压力大,而且客户端也无法即时获得响应。如果能将渲染后的结果放到速度更快的缓存中,每次有请求过来,先检查缓存中是否有对应的资源,如果有,直接从缓存中取出来返回响应,节省取数据和渲染的时间,不仅能大大提高系统性能,还能提高用户体验。
缓存使用场景:缓存主要适用于对页面实时性要求不高的页面。存放在缓存的数据,通常是频繁访问的,而不会经常修改的数据。
缓存方式:数据库、文件、内存、redis等
1 缓存配置
-
数据库缓存
# settings.py CACHES = { 'default':{ 'BACKEND':'django.core.cache.backends.db.DatabaseCache', 'LOCATION':'my_cache_table', } } #生成缓存表 python manage.py createcachetable
- 文件缓存
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) # } # } # }
- redis缓存
需要安装:pip3 install django-redis
CACHES = { 'default':{ 'BACKEND':'django_redis.cache.RedisCache',#指定缓存类型 redis缓存 'LOCATION':'redis://:[email protected]:6379/1', #缓存地址,@前面是reids的密码,如果没有则去掉 # 'LOCATION':'redis://127.0.0.1:6379/1', # 没密码 } }
2 缓存使用
-
视图函数
from django.views.decorators.cache import cache_page
@cache_page(60 * 0.5) #缓存过期时间
def dbcache(request):
return render(request,‘index.html’,context={‘content’:77665}) -
模板局部缓存
{% load cache %} <!DOCTYPE html> < html lang="en"> < head> < meta charset="UTF-8"> < title>Title< /title> < /head> < body> {% cache 30 'content' %} {{ content }} {% endcache %} < /body> < /html>
-
全站缓存
MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', ..... 'django.middleware.cache.FetchFromCacheMiddleware', ]
CACHE_MIDDLEWARE_SECONDS = 20 #设置超时时间 20秒
- 手动设置缓存
- 设置缓存:cache.set(key,value,timeout)
- 获取缓存:cache.get(key)
def myCache(req): 从缓存获取页面 mycache = cache.get('mycache') if mycache: print('走缓存了') html = mycache else: print('没走缓存') tem = loader.get_template('mycache.html') html = tem.render({'con':'缓存测试的模板'}) cache.set('mycache',html,60) return HttpResponse(html)
上一篇: PageHelper实现分页查询