Django中的缓存(内存,文件,redis)

Posted 可口_可乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中的缓存(内存,文件,redis)相关的知识,希望对你有一定的参考价值。

一、Django中的缓存的几种方法

1)单个视图缓存。时间测试

import time
from django.views.decorators.cache import cache_page
@cache_page(5)     # 缓存5秒
def test_time(request):
    ctime=time.time()
    return HttpResponse(ctime)

在5秒内访问的时间不变,该缓存到了内存里面

2)设置全局缓存

需要在settings添加中间件

MIDDLEWARE_CLASSES = (
    django.middleware.cache.UpdateCacheMiddleware’,    #第一 ,重写了response的方法
    django.middleware.common.CommonMiddleware,
    django.middleware.cache.FetchFromCacheMiddleware,  #最后,重写了request的方法
)
“update” 必须配置在第一个
“fetch” 必须配置在最后一个

配置缓存时间:CACHE_MIDDLEWARE_SECONDS=10

settings的示例

技术分享图片
MIDDLEWARE_CLASSES = (
    django.middleware.cache.UpdateCacheMiddleware,   #响应HttpResponse中设置几个headers
    django.contrib.sessions.middleware.SessionMiddleware,
    django.middleware.common.CommonMiddleware,
    django.middleware.csrf.CsrfViewMiddleware,
    django.contrib.auth.middleware.AuthenticationMiddleware,
    django.contrib.auth.middleware.SessionAuthenticationMiddleware,
    django.contrib.messages.middleware.MessageMiddleware,
    django.middleware.clickjacking.XFrameOptionsMiddleware,
    django.middleware.security.SecurityMiddleware,
    django.middleware.cache.FetchFromCacheMiddleware,   #用来缓存通过GET和HEAD方法获取的状态码为200的响应

)


CACHE_MIDDLEWARE_SECONDS=10
setting.py

视图函数编写(缓存所有视图有效)

import time
def test_time(request):
    ctime=time.time()
    return HttpResponse(ctime)

 3)模板层中的缓存。只缓存需要的内容。(关闭全局缓存)

html的编写

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="/static/jquery-3.3.1.js"></script>
    <title>Title</title>
</head>
<body>
{% load cache %}

当前时间:{{ ctime }}
<hr>

{% cache 5 time%}
应用缓存:{{ ctime }}
{% endcache %}

</body>

</html>
test.html

视图编写

技术分享图片
import time
def test_time(request):
    ctime=time.time()
    return render(request,test.html,locals())
View Code

 4)文件中的缓存。settings配置

技术分享图片
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)
  }
 }   
}
CACBES

视图编写

技术分享图片
import time
from django.views.decorators.cache import cache_page
@cache_page(5)
def test_time(request):
    ctime=time.time()
    return HttpResponse(ctime)
View Code

访问会在配置的路径下生成缓存文件

5)缓存到redis中。

5.1)安装 pip3 install django-redis

5.2)setting.py里面进行配置

# redis配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}    # 连接池
            # "PASSWORD": "123",
        }
    }
}

 

以上是关于Django中的缓存(内存,文件,redis)的主要内容,如果未能解决你的问题,请参考以下文章

Django 缓存

Django 缓存信号

Django之缓存

django内置缓存

Django 数据缓存

Django的缓存