【Django】缓存



由于Django是动态网站,所以每次请求都会去数据库中进行响应的操作。

当程序访问量大时,耗时必然会更加明显,最简单的解决方案就是使用缓存。

Django中的缓存:

==即将某一个view的返回值保存至内存或memcache中,默认保存5分钟。在此时间内如果有人来访问此view,则不会去执行此view,而是直接从内存或memcache中获取此view的返回值,并返回.==

Django中提供了6种缓存方式:

  1. 开发调试
  2. 内存
  3. 文件
  4. 数据库
  5. Memcache缓存(python-memcached模块)
  6. Memcache缓存(pylibmc模块)

    配置

    ***

    ==开发调试:==

# 开发调试用,实际内部不做任何操作,即不会缓存
CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.dummy.DummyCache‘,  # 引擎,指定为开发调试
        ‘TIMEOUT‘: 300,  # 超时时间
        ‘OPTIONS‘: {
            ‘MAX_ENTRIES‘: 300,  # 缓存的最大个数(默认300)
            ‘CULL_FREQUENCY‘: 3,  # 缓存超过最大个数后,剔除缓存个数的比例, 即:1/CULL_FREQUENCY(默认3)
        },
        # ‘KEY_PREFIX‘: ‘‘,  # 缓存key的前缀(默认空)
        # ‘VERSION‘: 1,  # 缓存key的版本(默认1)
        # ‘KEY_FUNCTION‘: "函数名",  # 生成key的函数(默认函数会生成为【前缀:版本:key】)
    },
}


==缓存到内存:==

# 此缓存将内容保存至内存的变量中
CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.locmem.LocMemCache‘,  # 引擎,指定为内存缓存
        ‘LOCATION‘: ‘unique-snowflake‘,  # 唯一标识
        ‘TIMEOUT‘: 300,  # 超时时间
        ‘OPTIONS‘: {
            ‘MAX_ENTRIES‘: 300,  # 缓存的最大个数(默认300)
            ‘CULL_FREQUENCY‘: 3  # 缓存超过最大个数后,剔除缓存个数的比例, 即:1/CULL_FREQUENCY(默认3)
        }
    }
}


==缓存到文件:==

# 此缓存将内容保存至文件
CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.filebased.FileBasedCache‘,  # 引擎,指定为文件缓存
        ‘LOCATION‘: ‘/Users/macbook/django_cache‘,  # 缓存的文件夹路径(需要手动创建好文件夹)
    }
}
# 注:其他配置同开发调试版本


==缓存到数据库:==

# 此缓存将内容保存至数据库
CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.db.DatabaseCache‘,
        ‘LOCATION‘: ‘my_cache_table‘,  # 指定数据表
    }
}
# 将以上配置写好之后,执行命令:python manage.py createcachetable, 将会自动创建数据表


==Memcache缓存(python-memcached模块):==

# 此缓存使用python-memcached模块连接memcache

CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.memcached.MemcachedCache‘,
        ‘LOCATION‘: ‘127.0.0.1:11211‘,
    }
}

CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.memcached.MemcachedCache‘,
        ‘LOCATION‘: ‘unix:/tmp/memcached.sock‘,
    }
}

CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.memcached.MemcachedCache‘,
        ‘LOCATION‘: [
            ‘172.19.26.240:11211‘,
            ‘172.19.26.242:11211‘,
        ]
    }
}


==Memcache缓存(pylibmc模块):==

# 此缓存使用pylibmc模块连接memcache

CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.memcached.PyLibMCCache‘,
        ‘LOCATION‘: ‘127.0.0.1:11211‘,
    }
}

CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.memcached.PyLibMCCache‘,
        ‘LOCATION‘: ‘/tmp/memcached.sock‘,
    }
}

CACHES = {
    ‘default‘: {
        ‘BACKEND‘: ‘django.core.cache.backends.memcached.PyLibMCCache‘,
        ‘LOCATION‘: [
            ‘172.19.26.240:11211‘,
            ‘172.19.26.242:11211‘,
        ]
    }
}



应用

***

==全站使用:==

使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户。在返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将数据保存至缓存,从而实现全站缓存。

MIDDLEWARE = [
    ‘django.middleware.cache.UpdateCacheMiddleware‘,  # 放缓存(要写在中间件列表的头部)
    ···
    # 其它中间件
    ···
    ‘django.middleware.cache.FetchFromCacheMiddleware‘,  # 获取缓存(要写在中间件列表的尾部)
]

# 中间件缓存配置
# CACHE_MIDDLEWARE_SECONDS = 5  # 超时时间(指定int类型)
# CACHE_MIDDLEWARE_ALIAS = ‘‘  # 别名
# CACHE_MIDDLEWARE_KEY_PREFIX = ‘‘  # 关键的前缀


==单独视图缓存:==

# 方式一:
from django.views.decorators.cache import cache_page  # 用于缓存视图

@cache_page(5)  # 指定缓存时间为5秒(默认15*60)
def test(request):
    pass

# 方式二:
from django.views.decorators.cache import cache_page  # 用于缓存视图

urlpatterns = [
    url(r‘^test/$‘, cache_page(5)(views.test)),
    # cache_page(5):指定缓存时间为5秒
    # (views.test):执行的视图函数
]


==局部模版使用:==

# 引入TemplateTag
{% load cache %}

# 使用缓存
{% cache 超时时间(s) 缓存key %}
    """将要缓存的内容写在此处"""
{% endcache %}


关于Django缓存的更多知识:https://docs.djangoproject.com/en/1.11/topics/cache/

原文地址:https://www.cnblogs.com/zyk01/p/10176341.html

时间: 2024-10-06 14:56:51

【Django】缓存的相关文章

Django—— 缓存框架

译者注:1.无用的,吹嘘的说辞不翻译:2.意译,很多地方不准确. 动态网站最为重要的一点就是好,网页是动态的.每一次用户请求页面,网站就要进行各种计算——从数据库查询,到render模板,到各种逻辑运算——生成页面所需的.这个过程是异常消耗资源的,远远比从硬盘读取一个文件然后显示出来的代价高昂. 对于大多数中小网站来说,这也许不是问题,因为他们的访问量不大,而对于大型网站而言,必须尽量减少不必要的服务器资源开支. 因此,有了缓存技术. 缓存就是把一些需要消耗很多资源的计算结果保存下来,当下次需要

Django缓存设置

Django缓存分为Session和Cookie:Session为放在服务器端的缓存:Cookie为放在客户端(浏览器)的缓存. Session一般用来保存登录会话:Cookie一般用来保存一些个性化的设置. Session示例: #!/usr/bin/env python #-*- encoding:utf-8 -*- from django.shortcuts import render,redirect # Create your views here. def login(request

[django]django缓存

发现搞了全局缓存后,刷新得不到最新数据了. 还好有过期时间 redis常用: https://www.cnblogs.com/fansik/p/5483060.html django-redis缓存: https://www.jianshu.com/p/04ef84c3fe3b https://blog.csdn.net/sinat_29699167/article/details/79699200 https://django-redis-chs.readthedocs.io/zh_CN/la

Django 缓存 使用 Redis Memcached 为网站提速

RedisRedis是一种键值对类型的内存数据库,读写内存比读写硬盘快,我们在Django里面使用Redis非常方便,下面给出详细步骤 基于Ubuntu 1. 安装Redis和django-redissudo apt-get install redis-server1用 redis 做 Django的缓存系统的开源项目地址,有兴趣的看看:https://github.com/niwibe/django-redis 在这里我们把它装上,让Django和Redis手拉手交个朋友 pip instal

contenttype组件、Django缓存机制以及跨域请求

1 昨日回顾 版本控制 *** (1)url=127.0.0.1/course/?version=v100000 1 versioning_class=QueryParameterVersioning 'VERSION_PARAM':'version', 'DEFAULT_VERSION':'v2', 'ALLOWED_VERSIONS':['v1','v2'] 2 配置成全局:在setting里:QueryParameterVersioning (2)重要(以后建议用这种):127.0.0.1

django 缓存 实现

由于Django构建得是动态网站,每次客户端请求都要严重依赖数据库,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存memcached .Redis中之前缓存的内容拿到,并返回. 一.Django缓存的配置和应用 Django中提供了6种缓存方式: 开发调试  (开发调试使用) 内存(不做配置默认:默认配置是Django内置配置文件(用户不可见)

drf版本控制 django缓存

drf的版本控制 内置的版本控制类 from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersioning,NamespaceVersioning,URLPathVersioning 各版本的传参方式 #基于url的get传参方式:QueryParameterVersioning------>如:/users?version=v1 #基于url的正则方式:URLPathVersioning----

Django缓存优化之redis

Redis 概述 Redis 是一个开源的Inmemory key-value 存储系统,性能高,很大程度上补偿了 memcached 的不足.支持多种存储类型,包括 string, list, set, zset(sorted set -- 有序集合)和 hash. Redis 优点 1)异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录.? 2)支持丰富的数据类型:Redis支持最大多数开发人员已经知道的像列表,集合,有序集合,散列数据类型.这使得它非常容易解

django缓存

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回. Django中提供了6种缓存方式: 开发调试 内存 文件 数据库 Memcache缓存(python-memcached模块) Memcache缓存(pylibmc模块) 1.配置 a.开

Python之路【第二十二章】:Django 缓存

缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回 Django中提供了6种缓存方式: 开发调试 内存 文件 数据库 Memcache缓存(python-memcached模块.pylibmc模块) 1.配置 ① 开发配置 # 此为开始