0
点赞
收藏
分享

微信扫一扫

Django-缓存

梦为马 2022-02-12 阅读 62

缓存是⼀类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式

在Django中,当⽤户请求到达视图后,视图会先从数据库提取数据放到模板中进⾏动态渲染,渲染后的结果就是⽤户看到的网页。如果⽤户每次请求都从数据库提取数据并渲染,将极⼤降低性能,不仅服务器压⼒⼤,⽽且客户端也⽆法即时获得响应。如果能将渲染后的结果放到速度更快的缓存中,每次有请求过来,先检查缓存中是否有对应的资源,如果有,直接从缓存中取出来返回响应,节省取数据和渲 染的时间,不仅能⼤⼤提⾼系统性能,还能提⾼⽤户体验。

缓存使用场景:缓存主要适⽤于对页面实时性要求不高的页面。存放在缓存的数据,通常是频繁访问的,⽽不会经常修改的数据。

缓存方式:数据库、⽂件、内存、redis等

一、缓存配置

1.1、数据库缓存

settings.py

CACHES = {
    'default':{
        'BACKEND':'django.core.cache.backends.db.DatabaseCache',
        'LOCATION':'my_cache_table',
    }
}

数据库缓存需要生成缓存表

python manage.py createcachetable

1.2、文件缓存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 指定缓存使⽤的引擎
        'LOCATION': os.path.join(BASE_DIR, 'chches'),  # 指定缓存的路径
        'TIMEOUT': 300,  # 缓存超时时间(默认为300秒,None表示永不过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最⼤缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最⼤个数之后,剔除缓存个数的⽐例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

1.3、redis缓存

需要安装引擎

pip install django-redis
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',  # 指定缓存类型redis缓存
        'LOCATION': 'redis://:123@127.0.0.1:6379/1',  # 缓存地址,@前⾯是reids的密码,如果没有则去掉
        # 'LOCATION':'redis://127.0.0.1:6379/1', # 没密码
    }
}

二、缓存的使用

2,1、视图函数

from django.views.decorators.cache import cache_page
@cache_page(60 * 0.5) #缓存过期时间
def dbcache(request):
	return render(request,'index.html',context={'content':77665})

2.2、模板局部缓存

{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% cache 30 'content' %}
    {{ content }}
    {% endcache %}
</body>
</html>

2.3、全站缓存

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    .....
    'django.middleware.cache.FetchFromCacheMiddleware',
]
CACHE_MIDDLEWARE_SECONDS = 20 #设置超时时间20秒

2.4、手动设置缓存

设置缓存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)

三、redis

一些基本指令

redis-cli
启动redis服务器

ping
检测服务器是否启动 PONG就是已经启动

set key value 
设置指定 key 的值
 
get key 
获取指定 key 的值
举报

相关推荐

Django-模板

django-模板

Django-外键

django-短信登录

Django-跨域问题Csrf

0 条评论