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",
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/linu/p/10122870.html
今日推荐